系统方向学习9--android 10.0 去掉未知来源弹窗 默认授予安装未知来源权限


活动地址:CSDN21天学习挑战赛

 最近跟着CSDN大佬,参与一个 21天打卡的活动 

Android framework开发者带你参加21天学习挑战赛活动_安卓兼职framework应用工程师的博客-CSDN博客

今天学习的

android 10.0 去掉未知来源弹窗 默认授予安装未知来源权限_安卓兼职framework应用工程师的博客-CSDN博客_android 未知来源权限

在9.0 以前的设备中,安装未来来源的权限开关 可以在SettingsProvider.app中的
DateHelper.java中通过一个config.xml中的 开关打开 就可以了 但是9.0以后 就不行了
需要在AppOpsManager.java中给与权限
接下来看下源码分析问题
路径:frameworks/base/core/java/android/app/AppOpsManager.java

其中代码里面有这么一句

AppOpsManager.MODE_DEFAULT, // OP_REQUEST_INSTALL_PACKAGES

把它修改成 

AppOpsManager.MODE_ALLOWED, // OP_REQUEST_INSTALL_PACKAGES

然后,在framework 中PackageInstaller的app中修改,这里处理整个安装app的过程

 安装之前会判断安装权限什么的 主要由PackageInstallerActivity.java来处理 

径:frameworks/base/packages/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java 

  分析PackageInstallerActivity.java 源码 

  protected void onCreate(Bundle icicle) {
      getWindow().addSystemFlags(SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS);
 
      ......
      checkIfAllowedAndInitiateInstall();
     // 安装前检查是否有权限
  }
  private void checkIfAllowedAndInitiateInstall() {
       .....
      if (mAllowUnknownSources || !isInstallRequestFromUnknownSource(getIntent())) {
        initiateInstall();
      } else {
           .....
          } else {
            // 检查如果未知来源进入
              handleUnknownSources();
          }
      }
  }
  private void handleUnknownSources() {
    if (mOriginatingPackage == null) {
        Log.i(TAG, "No source found for package " + mPkgInfo.packageName);
        showDialogInner(DLG_ANONYMOUS_SOURCE);
        return;
    }
。。。。。
}

 /**
 * Create a new dialog.
 *
 * @param id The id of the dialog (determines dialog type)
 *
 * @return The dialog
 */
private DialogFragment createDialog(int id) {
    switch (id) {
        case DLG_PACKAGE_ERROR:
            return SimpleErrorDialog.newInstance(R.string.Parse_error_dlg_text);
       //省略一堆代码
        case DLG_EXTERNAL_SOURCE_BLOCKED:
            return ExternalSourcesBlockedDialog.newInstance(mOriginatingPackage);
        case DLG_ANONYMOUS_SOURCE:
                   return AnonymousSourceDialog.newInstance();
		     break;
    }
    return null;
}

case DLG_ANONYMOUS_SOURCE 这里就会弹出未知来源弹窗
所以默认给与权限就这样修改:
修改 如下:

 
             case DLG_ANONYMOUS_SOURCE:
                //去掉弹出AnonymousSourceDialog对话框 默认安装
-                return AnonymousSourceDialog.newInstance();
+                mAllowUnknownSources = true;
+                 initiateInstall();
+                            break;
+                //return AnonymousSourceDialog.newInstance();
         }
         return null;
     }


 

猜你喜欢

转载自blog.csdn.net/yangbin0513/article/details/126448781