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

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

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

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

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

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


当前回答

从Android 11开始,你可以直接打开特定于应用程序的位置权限设置页面,只使用这样的代码:

然而,上述方法只会有效一次。如果用户拒绝许可,甚至不小心关闭了屏幕,应用程序永远不会触发它再次出现。

除此之外,答案与Android 11之前一样——你能做的最好的事情就是打开应用程序特定的设置页面,让用户手动下钻两层以启用适当的权限。

val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
val uri: Uri = Uri.fromParts("package", packageName, null)
intent.data = uri
// This will take the user to a page where they have to click twice to drill down to grant the permission
startActivity(intent)

请看我的相关问题:Android 11用户不能授予后台位置权限?

其他回答

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

根据Android文档

试试这个

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

从Android 11开始,你可以直接打开特定于应用程序的位置权限设置页面,只使用这样的代码:

然而,上述方法只会有效一次。如果用户拒绝许可,甚至不小心关闭了屏幕,应用程序永远不会触发它再次出现。

除此之外,答案与Android 11之前一样——你能做的最好的事情就是打开应用程序特定的设置页面,让用户手动下钻两层以启用适当的权限。

val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
val uri: Uri = Uri.fromParts("package", packageName, null)
intent.data = uri
// This will take the user to a page where they have to click twice to drill down to grant the permission
startActivity(intent)

请看我的相关问题:Android 11用户不能授予后台位置权限?

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

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

根据官方的棉花糖权限视频(在4米43秒的标记),你必须打开应用程序设置页面(从那里它是一个点击到权限页面)。

打开设置页面,你要做的就是

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