现在7.0系统的权限,对于系统默认的应用都要手动去授权,有点烦。体验也不好。目前改了一下可以指定哪个应用不要手动去授权。
说下我的写法,只是粗略的写了下,肯定有很多优化空间。
\packages\apps\PackageInstaller\AndroidManifest.xml
添加一个广播 。我这个广播是第一次开机启动launcher就会发送
+
+
+ <receiver
+ android:name=".OpenPermissionReceiver"
+ android:enabled="true"
+ android:exported="true">
+
+ <intent-filter>
+ <action android:name="intent.action.vlauncher" />
+ </intent-filter>
+
+ </receiver>
OpenPermissionReceiver.java的写法
+package com.android.packageinstaller;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.net.Uri;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+import com.android.packageinstaller.permission.model.AppPermissions;
+import com.android.packageinstaller.permission.model.AppPermissionGroup;
+
+public class OpenPermissionReceiver extends BroadcastReceiver {
+
+ private static final String LOG_TAG = "OpenPermissionReceiver";
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ if ("intent.action.vlauncher".equals(intent.getAction())) {
+ +
+ String packageName = "com.xx.xxx";//这里填写包名就可以了
+ PackageInfo packageInfo = getPackageInfo(context, packageName);
+ AppPermissions mAppPermissions = new AppPermissions(context, packageInfo, null, true, new Runnable() {
+ @Override
+ public void run() {
+ // getActivity().finish();
+ }
+ });
+
+
+
+ for (AppPermissionGroup group : mAppPermissions.getPermissionGroups()) {
+ if(!group.areRuntimePermissionsGranted())
+ group.grantRuntimePermissions(false);
+ }
+ }
+ }
+
+
+
+ private static PackageInfo getPackageInfo(Context context, String packageName) {
+ try {
+ return context.getPackageManager().getPackageInfo(packageName, PackageManager.GET_PERMISSIONS);
+ } catch (PackageManager.NameNotFoundException e) {
+ //android.util.Log.i(LOG_TAG, "No package:");
+ return null;
+ }
+ }
+}