美文网首页安卓开发博客Android进阶之路Android开发
Android 8.0 解决不能自动安装APK问题(完美适配)

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

作者: 会撒娇的犀犀利 | 来源:发表于2018-07-23 18:19 被阅读1341次

    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()
                    }
                }
            }
        }
    

    相关文章

      网友评论

      • 拾识物者:给力,终于找到正确答案了,requestPermission死活出不来
      • Time煮雨:冒昧问下,官方出。你怎么知道,未知来源应用安装权限被隐藏了。
        妙法莲花1234:@Time煮雨 不会隐藏的,否则拒绝了怎么开启?
        Time煮雨:@会撒娇的犀犀利 233333
        会撒娇的犀犀利:@Time煮雨 拿着8.0的手机就知道了,找不到入口
      • 小县城公务员:你好!我们是程序员大咖旗下专注于程序员生态的公众号程序员大咖(微信号 CodePush)。我们很赞赏你的文章,希望能获得转载授权。授权后,你的文章将会在公众号程序员大咖、程序员共读、源码共读、Java编程精选、iOS开发等渠道发布。我们会注明来源和作者姓名。
        非常感谢~~~
      • Time煮雨:8.0 系統會有這個問題,但是之前沒有加入这个权限。造成 8.0系统无法安装app,必须进行卸载安装。体验极差。楼主是怎么规避 8.0系统在未添加该权限时。无法升级app问题呢
        Time煮雨:@会撒娇的犀犀利 一样,兼容代码,需要发版安装才能解决。
        会撒娇的犀犀利:目前我们没有什么解决办法的,只能卸载重新安装,您有什么其他方案吗:smile:
      • 君莫笑啊君莫笑_:作者你好,你的代码意思是在检测版本更新之前就获取权限吗?
        君莫笑啊君莫笑_:@会撒娇的犀犀利 ok,谢谢小姐姐
        会撒娇的犀犀利:一般不都会先下载更新apk,然后在安装,在安装apk之前需要进行权限判断,当然这个还看需求是怎么样的。
      • Andylobin:feiwu

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

      本文链接:https://www.haomeiwen.com/subject/jqnjmftx.html