首先我是不建议使用“系统悬浮窗”去实现一些功能的 尽可能的使用一些的别的办法 一个activity啊 或者别的 如果你非要使用这个的话
首先你要在manifest.xml里面配上静态权限
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
这样在6.0一下是没问题的
在Android6.0以上你要动态申请权限 这个动态权限必须要去跳到权限页面开启的
if (Build.VERSION.SDK_INT >= 23) { // Android6.0及以后需要动态申请权限
if (!Settings.canDrawOverlays(mContext)) {
//启动Activity让用户授权
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, 1010);
} else {
// 弹出悬浮窗
}
} else {
// 弹出悬浮窗
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1010) {
if (Build.VERSION.SDK_INT >= 23) { // Android6.0及以后需要动态申请权限
if (Settings.canDrawOverlays(mContext)) {
// 弹出悬浮窗
} else {
Toast.makeText(mContext, "not granted permission!", Toast.LENGTH_SHORT);
}
}
}
}
然后在初始化弹窗view的时候 WindowManager.LayoutParams 的type属性要设置一下
不然会报错 permission denied for window type 2002
if (Build.VERSION.SDK_INT > 24) {
params.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
} else {
params.type = WindowManager.LayoutParams.TYPE_TOAST;
}
然后就基本搞定了 如果还有还有问题的话 欢迎留言讨论