我有一个关于新的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)));

其他回答

不可能以编程方式打开权限屏幕。相反,我们可以打开应用程序设置屏幕。

Code

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

样例输出

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

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

在Kotlin

    /*
*
* To open app notification permission screen instead of setting
* */
fun Context.openAppNotificationSettings() {
    val intent = Intent().apply {
        when {
            Build.VERSION.SDK_INT >= Build.VERSION_CODES.O -> {
                action = Settings.ACTION_APP_NOTIFICATION_SETTINGS
                putExtra(Settings.EXTRA_APP_PACKAGE, packageName)
            }
            else -> {
                action = Settings.ACTION_APPLICATION_DETAILS_SETTINGS
                addCategory(Intent.CATEGORY_DEFAULT)
                data = Uri.parse("package:" + packageName)
            }
        }
    }
    startActivity(intent)
}

以上是测试和工作代码,希望对大家有所帮助。

Kotlin风格。

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

Xamarin form Android:

//---------------------------------------------------------
public void OpenSettings()
//---------------------------------------------------------
{
    var intent = new Intent(Android.Provider.Settings.ActionApplicationDetailsSettings,
        Android.Net.Uri.Parse("package:" + Forms.Context.PackageName));
    Forms.Context.StartActivity(intent);
}