SYSTEM_ALERT_WINDOW 不同版本权限问题
程序员文章站
2022-06-14 10:24:50
...
最近按照网上 写一个系统级别弹窗demo 例如桌面加速小火箭
遇到的问题
Unable to add window [email protected] -- permission denied for this window type
原因是:
发现在使用WindowManager.LayoutParams.TYPE_SYSTEM_ALERT涉及到window type权限问题
首先配置文件申请权限
在Mainfest.xml中添加window 权限:
<!-- 显示系统窗口权限 -->
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
代码中 对不同版本进行判断
//for android 7.0
mParams.type=WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
//for android 8.0
// mParams.type=WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
代码:
final WindowManager.LayoutParams params = mParams;
params.height = WindowManager.LayoutParams.WRAP_CONTENT;
params.width = WindowManager.LayoutParams.WRAP_CONTENT;
params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
params.format = PixelFormat.TRANSPARENT;
//这里针对不同版本进行判断
if (Build.VERSION.SDK_INT >= 26)//8.0
params.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
else if(Build.VERSION.SDK_INT<23){//6.0
params.type = WindowManager.LayoutParams.TYPE_TOAST;
}else {
params.type = WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY;
}
params.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
params.setTitle("Toast");
params.gravity = Gravity.LEFT + Gravity.TOP;
mRocketView = View.inflate(this, R.layout.rocket_view, null);
//开启动画
final ImageView rocketView = mRocketView.findViewById(R.id.id_img_rocket);
AnimationDrawable animationDrawable = (AnimationDrawable) rocketView.getBackground();
animationDrawable.stop();
//挂到window窗口 (权限为处理好 此处会报错)
mWindowManager.addView(mRocketView, params);
下一篇: PHP教程.应用实例3
推荐阅读
-
Ubuntu18.0 解决python虚拟环境中不同用户下或者python多版本环境中指定虚拟环境的使用问题
-
荐 JDK11,8引入不同版本的jjwt异常问题
-
使用内嵌字体解决不同版本的Word 字体会发生改变问题
-
错误: 未能完成程序集的安装(hr = 0x8007000b),.net程序关于使用Oracle.DataAccess.dll不同版本x86和x64问题,即oracle odp.net 32位/64位版本的问题
-
flashbuilder不同版本共用工作空间的问题
-
LabVIEW2011能打开LabVIEW2016吗?LabVIEW不同版本之间的兼容性问题解答
-
服务器迁移php版本不同可能诱发的问题
-
Android 8.0 API 24.0 以上版本对SD卡的读写权限无效的问题
-
SYSTEM_ALERT_WINDOW 不同版本权限问题
-
mysql版本不同所导致SQL语句执行错误的问题