当前位置: 移动技术网 > IT编程>移动开发>Android > 浅析Android Service中实现弹出对话框的坑

浅析Android Service中实现弹出对话框的坑

2020年05月11日  | 移动技术网IT编程  | 我要评论

气功大师王林老婆,微信号怎么注销,洛南县人民政府

一、手机版本问题,大多数文章没有涉及这个点,导致他们的代码并无法正常使用

m版本以上需要使用的type--> type_application_overlay

alertdialog.builder builder=new alertdialog.builder(getapplicationcontext()); 
builder.settitle("提示"); 
builder.setmessage("service弹框"); 
builder.setnegativebutton("明白了",null); 
dialog dialog=builder.create();

if (build.version.sdk_int >= build.version_codes.m){//6.0       
  dialog.getwindow().settype(windowmanager.layoutparams.type_application_overlay);        
}else {       
  dialog.getwindow().settype(windowmanager.layoutparams.type_system_alert);        
} 
dialog.show();

同时,因为涉及不同版本的android系统

androidmanifest.xml 中声明同时需要这两个类型对应的权限  

 <uses-permission android:name="android.permission.system_alert_window"/>
  <uses-permission android:name="android.permission.system_overlay_window" />

二、权限问题,service中弹出的对话框为系统弹框,在m版本以上需要申请悬浮窗权限

android 6.0 以前悬浮窗是默认允许的

注意android 6.0以后的使用

因为悬浮窗权限 system_alert_window 属于特殊权限 ,需要自己特别单独申请

特殊权限,顾名思义,就是一些特别敏感的权限,在android系统中,主要由两个

system_alert_window(设置悬浮窗,进行一些黑科技)
write_settings (修改系统设置)

关于上面两个特殊权限的授权,做法是使用startactivityforresult启动授权界面来完成。

申请方式:

private static final int request_code = 1;
private void requestalertwindowpermission() {
  intent intent = new intent(settings.action_manage_overlay_permission);
  intent.setdata(uri.parse("package:" + getpackagename()));
  startactivityforresult(intent, request_code);
}

@override
protected void onactivityresult(int requestcode, int resultcode, intent data) {
  super.onactivityresult(requestcode, resultcode, data);
  if (requestcode == request_code) {
   if (build.version.sdk_int >= build.version_codes.m) {
     if (settings.candrawoverlays(this)) {
        log.i("xqxinfo", "onactivityresult granted");
     }
   } 
  } 
}

总结

到此这篇关于浅析android service中实现弹出对话框的坑的文章就介绍到这了,更多相关service实现弹出对话框内容请搜索移动技术网以前的文章或继续浏览下面的相关文章希望大家以后多多支持移动技术网!

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网