如何Settings -> Apps -> Draw over other apps在Android 中以编程方式授予权限?我想使用系统警报窗口,但无法在Android Marshmallow中强制用户通过"设置"应用并首先授予权限.
Sha*_*upa 15
您可以检查并要求使用此权限覆盖其他应用的覆盖权限
if (!Settings.canDrawOverlays(this)) {
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, 0);
}
Run Code Online (Sandbox Code Playgroud)
小智 13
if (!Settings.canDrawOverlays(this)) {
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, 0);
}
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"></uses-permission>
Run Code Online (Sandbox Code Playgroud)
vma*_*row 10
以下是自动授予程序包 SYSTEM_ALERT_WINDOW 权限的代码。要运行此代码,您的 Android 应用程序必须是系统应用程序(由平台密钥签名)。
该方法基于以下Android源代码文件:AppOpsManager.java和DrawOverlayDetails.java,参见方法DrawOverlayDetails.setCanDrawOverlay(boolean newState)。
@TargetApi(Build.VERSION_CODES.KITKAT)
public static void autoSetOverlayPermission(Context context, String packageName) {
PackageManager packageManager = context.getPackageManager();
int uid = 0;
try {
ApplicationInfo applicationInfo = packageManager.getApplicationInfo(packageName, 0);
uid = applicationInfo.uid;
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
return;
}
AppOpsManager appOpsManager = (AppOpsManager)context.getSystemService(Context.APP_OPS_SERVICE);
final int OP_SYSTEM_ALERT_WINDOW = 24;
try {
Class clazz = AppOpsManager.class;
Method method = clazz.getDeclaredMethod("setMode", int.class, int.class, String.class, int.class);
method.invoke(appOpsManager, OP_SYSTEM_ALERT_WINDOW, uid, packageName, AppOpsManager.MODE_ALLOWED);
Log.d(Const.LOG_TAG, "Overlay permission granted to " + packageName);
} catch (Exception e) {
Log.e(Const.LOG_TAG, Log.getStackTraceString(e));
}
}
Run Code Online (Sandbox Code Playgroud)
}
该代码已在Headwind MDM项目中进行了测试,当Headwind MDM 应用程序在没有任何用户同意的情况下,它成功授予了“Draw over other apps”权限(免责声明:我是 Headwind MDM 和 Headwind Remote 的项目所有者)由平台密钥签名。该代码已在 Android 10 (LineageOS 17) 上进行了测试。
| 归档时间: |
|
| 查看次数: |
13427 次 |
| 最近记录: |