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

是否有可能通过Intent或类似的东西来显示特定应用程序的“应用程序权限”屏幕?

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

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

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

我已经对此做了一些研究,但我无法找到解决方案。


当前回答

相反,你可以用一行来打开特定应用程序的一般设置:

 startActivity(new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS, Uri.parse("package:" + BuildConfig.APPLICATION_ID)));

其他回答

Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Uri uri = Uri.fromParts("package", getPackageName(), null);
intent.setData(uri);
startActivity(intent);

描述 设置。ACTION_APPLICATION_DETAILS_SETTINGS 打开应用程序的详细信息设置页面。从这里,用户必须手动分配所需的权限。

意图。FLAG_ACTIVITY_NEW_TASK 可选的。如果设置,则打开设置屏幕(活动)作为新活动。否则,它将在当前运行的活动中打开。

Uri.fromParts("package", getPackageName(), null) 准备或创建URI,而getPackageName() -返回应用程序包的名称。

intent.setData (uri) 别忘了设置这个。否则,你会得到android.content.ActivityNotFoundException。因为你已经把你的意图设置为设置。ACTION_APPLICATION_DETAILS_SETTINGS和android希望搜索某个名称。

Kotlin风格。

startActivity(Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS).apply {
    data = Uri.fromParts("package", packageName, null)
})

根据Android文档

试试这个

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

也许这对你有帮助

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);
}

打开特定应用程序的权限界面

            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 {}