因为Android中的Service的运行时没有界面不可见的,所以要在Service中弹框需要,稍加处理:
1,在配置清单中添加权限
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
2. AlertDialog.Builder builder = new AlertDialog.Builder(this)
.setTitle(getString(R.string.title_text_prompt))
.setMessage("你的权限太低暂不支持,暂不支持!")
.setPositiveButton(getString(R.string.confirm),null);
AlertDialog alertDialog = builder.create();
int type;
if (Build.VERSION.SDK_INT > 24){
type= WindowManager.LayoutParams.TYPE_PHONE;
}else if (Build.VERSION.SDK_INT>18){
type= WindowManager.LayoutParams.TYPE_TOAST;
}else{
type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
}
alertDialog.getWindow().setType(type);
alertDialog.show();
由于android版本的限制,在不同的版本中,需要设置不同的Type,省略申请权限的过程
如果想在Service中弹出toast,需要handler的配合,使用如下:
new Handler(new Runnable(){
public void run(){
Toast.makeText().show();
}
});
android中时长会使用到悬浮窗相关View,使用时,需要设置WindowManager.LayoutParams 的type类型
1,android4.4之前,如果悬浮窗没有单击事件,则设置type为TYPE_TOAST,反之,需要在配置文件中添加android.permission.SYSTEM_ALERT_WINDOW 并设置Type为TYPE_SYSTEM_ALERT
2,android5.0后,由于谷歌对做了权限的相关调整,可以直接设置TYPE_TOAST 即可满足正常需求(有单击事件),如果需要设置Type类型为TYPE_SYSTEM_ALERT 时,则需要申请System overlay view权限
3,android 7.0后 需要设置Type为TYPE_PHONE,为TYPE_TOAST则很快消失,也可以通过动态权限申请System overlay view的权限实现
网友评论