成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

Android7.0運(yùn)行時(shí)權(quán)限彈窗問(wèn)題的解決

Android 7.0系統(tǒng)在運(yùn)行應(yīng)用的時(shí)候,對(duì)權(quán)限做了諸多限制,normal, dangerous, signature, signatureOrSystem ,取決于保護(hù)級(jí)別,在確定是否授予權(quán)限時(shí),系統(tǒng)可能采取不同的操作。

創(chuàng)新互聯(lián)建站是一家專注于做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)與策劃設(shè)計(jì),民勤網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)建站做網(wǎng)站,專注于網(wǎng)站建設(shè)10年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:民勤等地區(qū)。民勤做網(wǎng)站價(jià)格咨詢:18980820575

  • normal 表示權(quán)限是低風(fēng)險(xiǎn)的,不會(huì)對(duì)系統(tǒng)、用戶或其他應(yīng)用程序造成危害;
  • dangerous 表示權(quán)限是高風(fēng)險(xiǎn)的,系統(tǒng)將可能要求用戶輸入相關(guān)信息,才會(huì)授予此權(quán)限;
  • signature 表示只有當(dāng)應(yīng)用程序所用數(shù)字簽名與聲明引權(quán)限的應(yīng)用程序所用數(shù)字簽名相同時(shí),才能將權(quán)限授給它;
  • signatureOrSystem 表示將權(quán)限授給具有相同數(shù)字簽名的應(yīng)用程序或android 包類。這一保護(hù)級(jí)別適和于非常特殊的情況,比如多個(gè)供應(yīng)商需要通過(guò)系統(tǒng)映像共享功能時(shí)

運(yùn)行時(shí)權(quán)限彈窗問(wèn)題是很多系統(tǒng)定制的客戶要求屏蔽的,一直以來(lái)沒(méi)有特別好的方法,下面我分享一下我自己驗(yàn)證可行的方案

方案1,修改frameworks/base/services/core/java/com/android/server/pm/PackageManagerService和frameworks/base/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy文件,PackageManagerService文件修改代碼如下:

 @Override
  public void systemReady() {
 ...
 synchronized (mPackages) {
      ...
      for (int userId : UserManagerService.getInstance().getUserIds()) {
        //if (!mSettings.areDefaultRuntimePermissionsGrantedLPr(userId)) {//注釋掉這個(gè)判斷
          grantPermissionsUserIds = ArrayUtils.appendInt(
              grantPermissionsUserIds, userId);
        //}
      }
    }

DefaultPermissionGrantPolicy文件修改代碼如下:

 private void grantPermissionsToSysComponentsAndPrivApps(int userId) {
    Log.i(TAG, "Granting permissions to platform components for user " + userId);
 
    synchronized (mService.mPackages) {
      for (PackageParser.Package pkg : mService.mPackages.values()) {
   // if (!isSysComponentOrPersistentPlatformSignedPrivAppLPr(pkg) //刪掉isSysComponentOrPersistentPlatformSignedPrivAppLPr判斷
 if(!doesPackageSupportRuntimePermissions(pkg)
            || pkg.requestedPermissions.isEmpty()) {
          continue;
        }
        Set<String> permissions = new ArraySet<>();
        final int permissionCount = pkg.requestedPermissions.size();
        for (int i = 0; i < permissionCount; i++) {
          String permission = pkg.requestedPermissions.get(i);
          BasePermission bp = mService.mSettings.mPermissions.get(permission);
          if (bp != null && bp.isRuntime()) {
            permissions.add(permission);
          }
        }
        if (!permissions.isEmpty()) {
          grantRuntimePermissionsLPw(pkg, permissions, true, userId);
        }
      }
    }
  }

簡(jiǎn)單說(shuō)明下這個(gè)方案的修改原理,在PMS的systemReady方法中會(huì)遍歷所有擁有默認(rèn)運(yùn)行時(shí)權(quán)限應(yīng)用,通過(guò)遍歷它們的UserId來(lái)賦予權(quán)限,注釋掉判斷是否為擁有運(yùn)行時(shí)權(quán)限的應(yīng)用方法后,會(huì)遍歷所有應(yīng)用,遍歷應(yīng)用且賦予權(quán)限的操作是在DefaultPermissionGrantPolicy中g(shù)rantPermissionsToSysComponentsAndPrivApps方法,注釋掉判斷簽名應(yīng)用和系統(tǒng)應(yīng)用的方法,普通應(yīng)用也可以獲取所有運(yùn)行時(shí)權(quán)限,這樣所有應(yīng)用都不會(huì)有運(yùn)行時(shí)權(quán)限的彈窗了。

方案2,只修改frameworks/base/services/core/java/com/android/server/pm/PackageManagerService文件,修改grantPermissionsLPw方法,代碼如下:

 private void grantPermissionsLPw(PackageParser.Package pkg, boolean replace,
      String packageOfInterest) {
   ...
   /*add for grant thirdparty app permssion S*/
   final String thirdPkgName = SystemProperties.get("persist.thirdparty.packagenames","");
      
   if(isSystemApp(pkg) || pkg.packageName.contains(thirdPkgName)){//xxx為包名
    final int permCount = pkg.requestedPermissions.size();
    for(int i = 0;i < permCount;i++){
      final String name = pkg.requestedPermissions.get(i);
      final BasePermission bp = mSettings.mPermissions.get(name);
      if(bp != null && permissionsState.grantInstallPermission(bp) != PermissionsState.PERMISSION_OPERATION_FAILURE){
        changeInstallPermission = true;
      }
   }
   /*add for grant thirdparty app permission E*/
   permissionsState.setGlobalGids(mGlobalGids);
   ...
 }

簡(jiǎn)單解釋下第二中方案的思路,PMS在應(yīng)用安裝的時(shí)候會(huì)根據(jù)應(yīng)用是否為簽名應(yīng)用、系統(tǒng)應(yīng)用或三方應(yīng)用來(lái)更新權(quán)限,這里可以做成白名單的形式,目前通過(guò)SystemProperties來(lái)獲取三方包名可以通過(guò)adb或者串口來(lái)測(cè)試三方應(yīng)用權(quán)限是否可以正常獲取。兩種方案大家可以自由選擇。

到此這篇關(guān)于Android 7.0 運(yùn)行時(shí)權(quán)限彈窗問(wèn)題的解決的文章就介紹到這了,更多相關(guān)Android7.0 權(quán)限彈窗 內(nèi)容請(qǐng)搜索創(chuàng)新互聯(lián)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持創(chuàng)新互聯(lián)!

網(wǎng)頁(yè)題目:Android7.0運(yùn)行時(shí)權(quán)限彈窗問(wèn)題的解決
標(biāo)題來(lái)源:http://jinyejixie.com/article6/gcehog.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動(dòng)態(tài)網(wǎng)站品牌網(wǎng)站建設(shè)、、企業(yè)網(wǎng)站制作、Google、域名注冊(cè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化
西吉县| 日喀则市| 瑞金市| 郁南县| 栾城县| 昌平区| 和林格尔县| 沁源县| 上林县| 抚松县| 德格县| 滦平县| 南昌市| 江津市| 客服| 兰溪市| 措美县| 眉山市| 廉江市| 黄梅县| 天长市| 寿宁县| 霍山县| 贡山| 金阳县| 乌审旗| 西和县| 东乡县| 板桥市| 镇江市| 白银市| 上虞市| 黑水县| 马龙县| 台中市| 蛟河市| 即墨市| 河南省| 宜川县| 青海省| 广汉市|