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
というそのまんまな名前のメソッドにより設定できる
注意点は上記で出てきてるpermission
はjava.security
のPermissionクラスではなく、com.android.packageinstaller.permission.model
のPermissionクラスなので、コードをコピペしてとりあえず動かそうってときに悲しくなったりする