如何在Android 6.0(Marshmallow)上以编程方式打开特定应用程序的权限屏幕?

451

我有一个关于新的Android 6.0(Marshmallow)发布的问题。

是否可以通过Intent或类似的方式显示特定应用程序的“应用权限”屏幕?

Android M Permission Screen

可以使用以下代码在设置中显示应用程序的“应用信息”屏幕:

startActivity(
    new Intent(
        android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
        Uri.fromParts("package", getPackageName(), null)
    )
);

是否有类似的解决方案可以直接打开应用程序的“应用程序权限”屏幕?

我已经做了一些研究,但是我没有找到解决方案。


尝试一下,它可能有效。https://dev59.com/J1wX5IYBdhLWcg3w-Thv#41221852 - Bipin Bharti
请查看此链接:在Android中打开应用程序设置屏幕 - Ravi
请查看以下链接:https://dev59.com/lRP7s4cB2Jgan1znGgTj#71837394 - AllanRibas
15个回答

5
也许这会对你有所帮助。
private void openSettings() {
    Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
    Uri uri = Uri.fromParts("package", getPackageName(), null);
    intent.setData(uri);
    startActivityForResult(intent, 101);
}

需要解释一下。例如,什么是想法/要点?请通过编辑(更改)您的答案进行回复,而不是在评论中(不带“编辑:”,“更新:”或类似内容 - 答案应该看起来像今天写的)。 - Peter Mortensen

4
如果我们只谈论Flyme(魅族),它有自己的安全应用程序和权限。要打开它,请使用以下意图:
public static void openFlymeSecurityApp(Activity context) {
    Intent intent = new Intent("com.meizu.safe.security.SHOW_APPSEC");
    intent.addCategory(Intent.CATEGORY_DEFAULT);
    intent.putExtra("packageName", BuildConfig.APPLICATION_ID);
    try {
        context.startActivity(intent);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

当然,BuildConfig 是您的应用程序的 BuildConfig

0
打开特定应用程序的权限屏幕。
            if (ContextCompat.checkSelfPermission(
                    context, Manifest.permission.WRITE_EXTERNAL_STORAGE)
                != PackageManager.PERMISSION_GRANTED
            ) {
                //Permission is not granted yet. Ask for permission.
                val alertDialog = AlertDialog.Builder(context)
                alertDialog.setMessage(context.getString(R.string.file_permission))
                alertDialog.setPositiveButton("सेटिंग") { _, _ ->
                    val intent = Intent(
                        Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
                        Uri.fromParts("package", BuildConfig.APPLICATION_ID, null)
                    )
                    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
                    context.startActivity(intent)
                }
                alertDialog.setNegativeButton("हाँ") { _, _ ->
                    ActivityCompat.requestPermissions(
                        context as Activity, arrayOf(
                            Manifest.permission.WRITE_EXTERNAL_STORAGE
                        ), 1
                    )
                }
                alertDialog.show()
            } else {}

-1

无法以编程方式获取权限... 但我建议您将该行代码放在try{} catch{}中,这会使您的应用程序不幸停止...

在catch体中,制作一个对话框,它将引导用户进入一个小教程,以启用其他应用程序的绘图权限... 然后在按钮单击时添加此代码...

Intent callSettingIntent= new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
startActivity(callSettingIntent);

这个意图是直接打开应用覆盖列表以管理权限,从这里只需点击一次即可访问应用覆盖其他应用的权限。

我知道这不是你想要的答案... 但是我在我的应用程序中这样做...


-1
根据Android 文档

试一试

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setComponent(new ComponentName(appDetails.packageName,"com.android.packageinstaller.permission.ui.ManagePermissionsActivity"));
startActivity(intent);

1
需要解释一下。例如,什么是想法/要点?请通过编辑(更改)您的答案进行回复,而不是在评论中(不带“编辑:”,“更新:”或类似内容 - 答案应该看起来像今天写的)。 - Peter Mortensen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接