活动地址: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;
- }