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

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

M版本以上需要使用的Type–>TYPE_APPLICATION_OVERLAY
AlertDialog.Builderbuilder=newAlertDialog.Builder(getApplicationContext());
builder.setTitle(“提示”);
builder.setMessage(“service弹框”);
builder.setNegativeButton(“明白了”,null);
Dialogdialog=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-permissionandroid:name=”android.permission.SYSTEM_ALERT_WINDOW”/>
<uses-permissionandroid:name=”android.permission.SYSTEM_OVERLAY_WINDOW”/>

android


二、权限问题,service中弹出的对话框为系统弹框,在M版本以上需要申请悬浮窗权限
Android6.0以前悬浮窗是默认允许的
注意Android6.0以后的使用
因为悬浮窗权限SYSTEM_ALERT_WINDOW属于特殊权限,需要自己特别单独申请
特殊权限,顾名思义,就是一些特别敏感的权限,在Android系统中,主要由两个
SYSTEM_ALERT_WINDOW(设置悬浮窗,进行一些黑科技)
WRITE_SETTINGS(修改系统设置)
关于上面两个特殊权限的授权,做法是使用startActivityForResult启动授权界面来完成。
申请方式:
privatestaticfinalintREQUEST_CODE=1;
privatevoidrequestAlertWindowPermission(){
Intentintent=newIntent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
intent.setData(Uri.parse(“package:”+getPackageName()));
startActivityForResult(intent,REQUEST_CODE);
}
@Override
protectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){
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”,”onActivityResultgranted”);
}
}
}
}

© 版权声明
好牛新坐标
版权声明:
1、IT大王遵守相关法律法规,由于本站资源全部来源于网络程序/投稿,故资源量太大无法一一准确核实资源侵权的真实性;
2、出于传递信息之目的,故IT大王可能会误刊发损害或影响您的合法权益,请您积极与我们联系处理(所有内容不代表本站观点与立场);
3、因时间、精力有限,我们无法一一核实每一条消息的真实性,但我们会在发布之前尽最大努力来核实这些信息;
4、无论出于何种目的要求本站删除内容,您均需要提供根据国家版权局发布的示范格式
《要求删除或断开链接侵权网络内容的通知》:https://itdw.cn/ziliao/sfgs.pdf,
国家知识产权局《要求删除或断开链接侵权网络内容的通知》填写说明: http://www.ncac.gov.cn/chinacopyright/contents/12227/342400.shtml
未按照国家知识产权局格式通知一律不予处理;请按照此通知格式填写发至本站的邮箱 wl6@163.com

相关文章