3 回答

TA贡献1860条经验 获得超8个赞
在棉花糖来之后,Android让安全级别更加坚持,但是
SYSTEM_ALERT_WINDOW
你可以显示浮动动作和任何你可以强制用户给它的权限通过你的onCreate()
方法中的以下代码将此代码放在setContentView之后
// Check if Android M or higher if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { // Show alert dialog to the user saying a separate permission is needed // Launch the settings activity if the user prefers Intent myIntent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION); startActivity(myIntent); }
该操作ACTION_MANAGE_OVERLAY_PERMISSION
直接启动“绘制其他应用程序”权限屏幕。
编辑:我的上面的代码工作100%正确
但我发现很多人仍然在寻找ACTION_MANAGE_OVERLAY_PERMISSION
永久性的允许方式如果用户已经允许Permission Once那么每次打开应用程序时都不要问它,所以请听你的解决方案 -
检查设备是否具有API 23+
如果23+ API然后检查用户是否有许可
如果有许可,一旦不驱使他
Settings.ACTION_MANAGE_OVERLAY_PERMISSION
,如果还没有许可,那么请求运行时权限检查
在你的onCreate()
方法中放在下面。把它放在后面setContentView
checkPermission();
现在把代码放在下面 onActivityResult
@TargetApi(Build.VERSION_CODES.M)@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE) { if (!Settings.canDrawOverlays(this)) { // You don't have permission checkPermission(); } else { // Do as per your logic } }}
现在最后是checkPermission方法代码
public void checkPermission() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (!Settings.canDrawOverlays(this)) { Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + getPackageName())); startActivityForResult(intent, ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE); } }}
并且不要忘记在您的类中声明此公共变量
public static int ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE = 5469;

TA贡献1820条经验 获得超9个赞
如果应用程序的目标是API 22或更低版本,则Play Store会在用户点击安装(显示警报)时提供SYSTEM_ALERT_WINDOW权限,即使其设备是Android 6.0,否则,如果应用程序的目标是API 23或更高版本,那么许可将被要求在运行时授予。
- 3 回答
- 0 关注
- 1094 浏览
添加回答
举报