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

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

2020年04月09日  | 移动技术网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");
     }
   }
  }
}

 

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

相关文章:

验证码:
移动技术网