如何以编程方式打开Android棉花糖上的特定应用程序的权限屏幕?

我有一个关于新的Android棉花糖版本的问题:

通过意图或类似的方式显示特定应用程序的权限屏幕是否可行?

Android M权限屏幕

可以使用下面的代码显示应用程序设置 – 是否有直接打开权限屏幕的模拟解决scheme?

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

我已经做了一些这方面的研究,但是我找不到一个合适的解决scheme – 我会感谢每一个帮助!

    根据棉花糖官方授权video( 4米43的标志 ),你必须打开应用程序设置页面(从那里只需点击一下权限页面)。

    要打开设置页面,你会这样做

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

    这不可能。 我也试图这样做。 我可以找出包的名称和将要开始的活动。 但最后你会得到一个安全的例外,因为你不能声明的权限缺失。

    更新:

    关于其他答案,我也build议打开应用程序设置屏幕。 我用下面的代码来做到这一点:

      public static void startInstalledAppDetailsActivity(final Activity context) { if (context == null) { return; } final Intent i = new Intent(); i.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); i.addCategory(Intent.CATEGORY_DEFAULT); i.setData(Uri.parse("package:" + context.getPackageName())); i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); i.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); i.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); context.startActivity(i); } 

    因为我不想在我的历史堆栈中有这个,所以我使用intent标志去除它。

    相反,您可以用一行打开特定应用程序的常规设置

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

    描述

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

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

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

    intent.setData(uri)
    不要忘记设置这个 。 否则,你会得到android.content.ActivityNotFoundException因为您的意图 Settings.ACTION_APPLICATION_DETAILS_SETTINGS Settings.ACTION_APPLICATION_DETAILS_SETTINGS ,android需要search某个名称。

    如果我们只是谈论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

    这是不可能的务实获得许可…但不适当的build议你把这行代码try {} catch {},这使得你的应用程序不幸停止…并在catch身体做一个对话框,将导航用户到小教程,使其他应用程序的权限绘制…然后在是button点击把这个代码…

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

    这个意图是直接打开其他应用程序的绘制列表来pipe理权限,然后从这里它是一个点击画在其他应用程序权限…我知道这不是你正在寻找的答案…但我在我的应用程序中做这个…

    使用requestPermissions方法是可能的

    虽然不能直接看到设置页面,但可以更改访问权限。
    一个很好的例子:
    https://www.learn2crack.com/2015/10/android-marshmallow-permissions.html

    这样你可以检查和呼叫

     if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && checkSelfPermission(android.Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { requestPermissions(new String[]{android.Manifest.permission.READ_EXTERNAL_STORAGE}, 0); }