1) 在 pre-API 23 上,已经授予权限,因为用户在安装时授予了权限。
编辑:Android 6 上似乎存在一个错误(将在 6.0.1 上得到修复),如果用户拒绝此权限,应用程序将因 SecurityException 而崩溃。不知道谷歌是如何修复它的。
2)这样:
public static void requestSystemAlertPermission(Activity context, Fragment fragment, int requestCode) {
if (VERSION.SDK_INT < VERSION_CODES.M)
return;
final String packageName = context == null ? fragment.getActivity().getPackageName() : context.getPackageName();
final Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + packageName));
if (fragment != null)
fragment.startActivityForResult(intent, requestCode);
else
context.startActivityForResult(intent, requestCode);
}
然后,在 onActivityResult 中,您可以检查是否已授予权限,如下所示:
@TargetApi(VERSION_CODES.M)
public static boolean isSystemAlertPermissionGranted(Context context) {
final boolean result = VERSION.SDK_INT < VERSION_CODES.M || Settings.canDrawOverlays(context);
return result;
}
编辑:目前,如果您将应用发布到 Play 商店,您的应用将自动获得此权限。你可以在这里阅读。当我问到它时,我认为它是 Android 本身的一部分,因为我认为我们需要的只是为 targetSdkVersion 设定一个足够高的值。谷歌写信给我(这里)是他们希望避免流行应用程序出现问题。
我建议正确处理此权限,即使您将自动授予它。