• 系统方向学习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 源码 

    1. protected void onCreate(Bundle icicle) {
    2. getWindow().addSystemFlags(SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS);
    3. ......
    4. checkIfAllowedAndInitiateInstall();
    5. // 安装前检查是否有权限
    6. }
    7. private void checkIfAllowedAndInitiateInstall() {
    8. .....
    9. if (mAllowUnknownSources || !isInstallRequestFromUnknownSource(getIntent())) {
    10. initiateInstall();
    11. } else {
    12. .....
    13. } else {
    14. // 检查如果未知来源进入
    15. handleUnknownSources();
    16. }
    17. }
    18. }
    19. private void handleUnknownSources() {
    20. if (mOriginatingPackage == null) {
    21. Log.i(TAG, "No source found for package " + mPkgInfo.packageName);
    22. showDialogInner(DLG_ANONYMOUS_SOURCE);
    23. return;
    24. }
    25. 。。。。。
    26. }
    27. /**
    28. * Create a new dialog.
    29. *
    30. * @param id The id of the dialog (determines dialog type)
    31. *
    32. * @return The dialog
    33. */
    34. private DialogFragment createDialog(int id) {
    35. switch (id) {
    36. case DLG_PACKAGE_ERROR:
    37. return SimpleErrorDialog.newInstance(R.string.Parse_error_dlg_text);
    38. //省略一堆代码
    39. case DLG_EXTERNAL_SOURCE_BLOCKED:
    40. return ExternalSourcesBlockedDialog.newInstance(mOriginatingPackage);
    41. case DLG_ANONYMOUS_SOURCE:
    42. return AnonymousSourceDialog.newInstance();
    43. break;
    44. }
    45. return null;
    46. }

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

    1. case DLG_ANONYMOUS_SOURCE:
    2. //去掉弹出AnonymousSourceDialog对话框 默认安装
    3. - return AnonymousSourceDialog.newInstance();
    4. + mAllowUnknownSources = true;
    5. + initiateInstall();
    6. + break;
    7. + //return AnonymousSourceDialog.newInstance();
    8. }
    9. return null;
    10. }


     

  • 相关阅读:
    20231016比赛总结
    作为一名外贸业务员,如何正确跟进客户?
    求解答 sql 的行有条件复制数据
    压敏电阻的原理和使用介绍
    常见的七大排序
    MIT6.S081 2021 locks
    让PPT更好看的方法,需要的朋友快来吧
    rebase 和 merge合并代码
    基于Python的性能优化
    JVM 内存结构
  • 原文地址:https://blog.csdn.net/yangbin0513/article/details/126448781