如何以编程方式打开Android棉花糖上的特定应用程序的权限屏幕?
我有一个关于新的Android棉花糖版本的问题:
通过意图或类似的方式显示特定应用程序的权限屏幕是否可行?
可以使用下面的代码显示应用程序设置 – 是否有直接打开权限屏幕的模拟解决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); }