他アプリにPermissionダイアログを表示させずに権限を付与する方法

More than 1 year has passed since last update.

System App のみ


必要Persmittion

<uses-permission android:name="android.permission.GRANT_REVOKE_PERMISSIONS" />

<uses-permission android:name="android.permission.UPDATE_APP_OPS_STATS" />
<uses-permission android:name="android.permission.GRANT_RUNTIME_PERMISSIONS" />
<uses-permission android:name="android.permission.REVOKE_RUNTIME_PERMISSIONS" />

あたりを付与する側に付けておく


実コード

Androidのソースの com.android.packageinstaller.permission.ui.handheld.AppPermissionsFragmentあたりを見るのが一番早い

com.android.packageinstaller.permission.model.AppPermissionGroupが実際に権限を付与したりはずしたりしてて、その中のgrantRuntimePermissionsメソッド参照

こいつの実体は


AppPermissionGroup.java

mPackageManager.updatePermissionFlags(permission.getName(),

mPackageInfo.packageName,
PackageManager.FLAG_PERMISSION_USER_SET
| PackageManager.FLAG_PERMISSION_USER_FIXED,
0, mUserHandle);

上記のメソッドを呼ぶところが本丸

PackageManagerのupdatePermissionFlagsというそのまんまな名前のメソッドにより設定できる

注意点は上記で出てきてるpermissionjava.securityのPermissionクラスではなく、com.android.packageinstaller.permission.modelのPermissionクラスなので、コードをコピペしてとりあえず動かそうってときに悲しくなったりする