RK3568 Android11 系统第三方应用系统修改权限及在应用上层显示权限默认打开

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

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值