Android 8.0 解决不能自动安装APK问题(完美适配)

Android8.0之前

未知应用安装权限默认开启,如下图所示


8.0以下手机未知应用安装权限.png

Android8.0之后

未知应用安装权限默认关闭,且权限入口隐藏。

如何开启未知应用安装权限的入口,并设置允许安装?
  1. 在清单文件中添加权限
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
  1. 判断当前是否为8.0以上系统(在这之前也可以对7.0系统进行判断,这里代码没有贴出)
 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        boolean hasInstallPermission = isHasInstallPermissionWithO(context);
        if (!hasInstallPermission) {
            startInstallPermissionSettingActivity(context);
                    return;
        }
}
  1. 如果为8.0以上系统,则判断是否有未知应用安装权限
@RequiresApi (api = Build.VERSION_CODES.O)
private boolean isHasInstallPermissionWithO(Context context){
    if (context == null){
        return false;
    }
    return context.getPackageManager().canRequestPackageInstalls();
}
  1. 如果没有未知应用安装权限,则需要手动开启
/**
 * 开启设置安装未知来源应用权限界面
 * @param context
 */
@RequiresApi (api = Build.VERSION_CODES.O)
private void startInstallPermissionSettingActivity(Context context) {
    if (context == null){
        return;
    }
    Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES);
    ((Activity)context).startActivityForResult(intent,REQUEST_CODE_APP_INSTALL);
}
  1. Activity回调(这一步根据需求来确定)
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (resultCode== Activity.RESULT_OK ){
            when(requestCode){
                REQUEST_CODE_APP_INSTALL -> {
                    onSettingCheckUpdate()
                }
            }
        }
    }

最后,希望此篇博客对大家有所帮助,欢迎提出问题及建议共同探讨,如有兴趣可以关注我的博客,谢谢!

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 141,822评论 18 609
  • 书缘,就是我不说,你都懂,然后用文字说出我想说又不知怎么说的话,告诉我:拿去,不谢! 有些书,读了一遍又一遍,每次...
    提醒记忆阅读 106评论 0 0
  • 放纵是无限循环的痛苦 自律是美到极限的人生
    单大美阅读 30评论 3 2
  • 十年很漫长,但也很短暂。她,一个坚强的女人,十年前,她怀着对未来的憧憬来到这座陌生的城市。她为自己的梦想打...
    林中剑客_e563阅读 118评论 0 0
  • 喜欢就买,胖了就减,不爱就走,全力以赴,你会很酷!
    笑笑ij阅读 18评论 0 0