Android11 系统第三方应用系统修改权限及在应用上层显示权限默认打开
前言
在进行Frameworks开发过程中遇到可与需要给与危险权限,试过了在AppOpsManager.java内直接直接设置为MODE_ALLOWED不能成功,不生效.最终找到以下方法,可以在开机时时给内置的指定的APP默认给予危险权限.
一、修改位置
frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java frameworks/base/packages/SettingsProvider/res/values/array.xml
二、具体修改
1.DatabaseHelper.java修改
代码如下(示例):
--- a/frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
+++ b/frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
@@ -15,7 +15,9 @@
*/
package com.android.providers.settings;
+import android.content.pm.PackageInfo;
+import android.app.AppOpsManager;
import android.content.ComponentName;
import android.content.ContentValues;
import android.content.Context;
@@ -2231,7 +2233,80 @@ class DatabaseHelper extends SQLiteOpenHelper {
if (mUserHandle == UserHandle.USER_SYSTEM) {
loadGlobalSettings(db);
}
+ loadAppOpsPermission();
}
+ /*add by ltj add appops permission disable app */
+ /*SUN:jicong.wang add appops permission disable app */
+ private void loadAppOpsPermission(){
+ AppOpsManager appOpsManager = (AppOpsManager) mContext.getSystemService(Context.APP_OPS_SERVICE);
+ PackageManager pm = mContext.getPackageManager();
+
+
+ // final String []itemString = mContext.getResources()
+ // .getStringArray(com.android.internal.R.array.system_alert_window_permission_disable_custom_packagename);
+
+
+ // for (int i = 0; i < itemString.length; i++) {
+ // try {
+ // PackageInfo packageInfo = pm.getPackageInfo(itemString[i],
+ // PackageManager.GET_DISABLED_COMPONENTS |
+ // PackageManager.GET_UNINSTALLED_PACKAGES |
+ // PackageManager.GET_SIGNATURES);
+
+
+ // appOpsManager.setMode(AppOpsManager.OP_SYSTEM_ALERT_WINDOW,
+ // packageInfo.applicationInfo.uid, itemString[i], AppOpsManager.MODE_ERRORED);
+ // } catch (Exception e) {
+ // Log.e(TAG, "Exception when retrieving package:", e);
+ // }
+ // }
+
+
+ final String []itemStringExt = mContext.getResources()
+ .getStringArray(R.array.system_alert_window_permission_custom_packagename);
+
+
+ for (int i = 0; i < itemStringExt.length; i++) {
+ try {
+ PackageInfo packageInfo = pm.getPackageInfo(itemStringExt[i],
+ PackageManager.GET_DISABLED_COMPONENTS |
+ PackageManager.GET_UNINSTALLED_PACKAGES |
+ PackageManager.GET_SIGNATURES);
+
+
+ appOpsManager.setMode(AppOpsManager.OP_SYSTEM_ALERT_WINDOW,
+ packageInfo.applicationInfo.uid, itemStringExt[i], AppOpsManager.MODE_ALLOWED);
+ } catch (Exception e) {
+ Log.e(TAG, "Exception when retrieving package:", e);
+ }
+ }
+
+
+ final String []itemStringExt1 = mContext.getResources()
+ .getStringArray(R.array.write_settings_permission_custom_packagename);
+
+
+ for (int i = 0; i < itemStringExt1.length; i++) {
+ try {
+ PackageInfo packageInfo = pm.getPackageInfo(itemStringExt1[i],
+ PackageManager.GET_DISABLED_COMPONENTS |
+ PackageManager.GET_UNINSTALLED_PACKAGES |
+ PackageManager.GET_SIGNATURES);
+
+
+ appOpsManager.setMode(AppOpsManager.OP_WRITE_SETTINGS,
+ packageInfo.applicationInfo.uid, itemStringExt1[i], AppOpsManager.MODE_ALLOWED);
+ } catch (Exception e) {
+ Log.e(TAG, "Exception when retrieving package:", e);
+ }
+ }
+
+
+
+ }
+
+ /*add end by ltj add appops permission disable app */
+
2.array.xml修改
代码如下(示例):
<?xml version="1.0" encoding="utf-8"?>
<!--
/* //device/apps/common/assets/res/any/colors.xml
**
** Copyright 2006, The Android Open Source Project
**
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
** You may obtain a copy of the License at
**
** http://www.apache.org/licenses/LICENSE-2.0
**
** Unless required by applicable law or agreed to in writing, software
** distributed under the License is distributed on an "AS IS" BASIS,
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
** See the License for the specific language governing permissions and
** limitations under the License.
*/
-->
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<!-- Do not translate. These are all of the drawable resources that should be preloaded by
the zygote process before it starts forking application processes. -->
<string-array name="system_alert_window_permission_custom_packagename">
<item>com.alibaba.mmc.launcher</item> //需要默认给权限的包名,可以改成指定包名
<item>com.tcc.wireless.sorter</item>
<item>com.taobao.civita.agent</item>
<item>com.alibaba.mmc.sysupdate</item>
</string-array>
<string-array name="write_settings_permission_custom_packagename">
<item>com.alibaba.mmc.launcher</item>
<item>com.tcc.wireless.sorter</item>
<item>com.taobao.civita.agent</item>
<item>com.alibaba.mmc.sysupdate</item>
</string-array>
</resources>
如果指定文件夹下没有array.xml 可以直接复制上述代码新建一个。
总结
在开机加载数据库配置的是否,动态的给予指定文件夹下的全部包名指定权限,这两个权限也可以改成其他需要动态授权的危险权限.可以根据代码举一反三.
每日赠言
学习感到难受的时候,那就是你正在进步,一步一个脚印,交给时间
参考链接
https://blog.csdn.net/wangjicong_215/article/details/71601494