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

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

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

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

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

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


当前回答

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

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

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

其他回答

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

Code

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

样例输出

从实用主义的角度获得许可是不可能的。 但我建议你把这行代码放在try{} catch{}中,这会让你的应用不幸地停止…

在catch主体中,创建一个对话框,将用户导航到一个小教程,以启用其他应用程序的权限。 然后在确定按钮上单击添加此代码…

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

这一意图是直接打开其他应用程序的权限管理权限,然后从这里是一个点击到其他应用程序的权限。

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

也许这对你有帮助

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

Kotlin风格。

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

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

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

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