志在指尖
用双手敲打未来

浅谈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”);
}
}
}
}

未经允许不得转载:IT技术网站 » 浅谈Service中实现弹出对话框的坑
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

志在指尖 用双手敲打未来

登录/注册IT技术大全

热门IT技术

C#基础入门   SQL server数据库   系统SEO学习教程   WordPress小技巧   WordPress插件   脚本与源码下载