Android软件自动更新升级(自动下载安装新版本)

因为Android系统版本的不同踩了不少坑,在此记录。

1.Android 8.0以后无法下载到SDK中

问题原因: 文件的存储权限原因导致的

  1. 动态申请sdk存储权限:Android 6.0以后都是需要动态申请权限的,注意即使动态申请了权限也要在AndroidManifest.xml申请一下,因为需要兼容低版本,低版本中没有动态申请权限一说。
  2. Android 7.0以后又对存储权限加了限制应用私有目录被限制访问 
  •  私有文件的文件权限不应再由所有者放宽,使用MODE_WORLD_READABLE/MODE_WORLD_WRITEABLE将抛出异常 
  • 向应用外传递file://URI会出发FileUriExposedException

解决方法:

   问题一:判断版本,动态申请权限

 //----------------------------------------动态申请权限-------------------------------
 private void sdkPermission() {
        if(Build.VERSION.SDK_INT>Build.VERSION_CODES.M) {//高于6.0版本,动态申请权限
            if (ContextCompat.checkSelfPermission(context, "android.permission.WRITE_EXTERNAL_STORAGE") != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(this, new String[]{"android.permission.WRITE_EXTERNAL_STORAGE"}, 111);
            } else {
                downloadApk();
            }
        }
        else {
            downloadApk();//低于6.0版本,直接下载apk
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        switch (requestCode) {
            case 111:
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    //权限已经都通过了,可以下载apk到SDk中了
                    downloadApk();
                } else {
                   // 没有申请权限
                    showPermissionDialog();
                }
                break;
            default:
        }
    }

   问题二:7.0以后使用FileProvider访问sdk私有文件

FileProvider:   

     当targetSdkVersion>=24时,会存在上述问题,可能涉及到的场景有:拍照,程序安装等。 
     同时,官方在v4包(api=22开始)中引入FileProvider类用于程序间私有文件的共享。该类继承自ContentProvider,使用时需  要在清单文件中注册

  • 第一步   注册:在清单文件中通过标签注册,参考代码对属性进行说明:

  • 3
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值