Android 10版本更新失败的原因总结

之前写过一篇关于Android版本更新的博客,又不知道怎么写版本更新的,可以去看这篇博客,今天这篇博客主要是总结,版本更新失败的原因会有那些,这里大家对比一下,看哪里没有写上,自行添加!!
安卓版本更新的博客地址:安卓检测版本更新

下面就是版本更新失败的原因有以下几点:
一、权限

<!---->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!---->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
  <!-- 8.0手机安装软件 -->
    <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
    <!-- 允许装载和卸载文件系统权限 -->
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />

二、检测是否有开启读写权限,没有弹出框提示开启

 private static String[] PERMISSIONS = {
    
    
            Manifest.permission.READ_EXTERNAL_STORAGE,
            Manifest.permission.WRITE_EXTERNAL_STORAGE };
    private static int REQUEST_PERMISSION_CODE = 1;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    
    
            Log.e(Thread.currentThread().getStackTrace()[2] + "", "checkSelfPermission: " + checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE));
            if (checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED && checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
    
    
                requestPermissions(PERMISSIONS, REQUEST_PERMISSION_CODE);
            }
        }
        
        ......
    }
 
    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    
    
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == REQUEST_PERMISSION_CODE) {
    
    
            for (int i = 0; i < permissions.length; i++) {
    
    
                Log.e(Thread.currentThread().getStackTrace()[2] + "", permissions[i] + ": " + grantResults[i]);
            }
        }
    }
 

三、数据
AndroidManifest中的配置

  <!-- 7.0安装 -->
        <provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="cn.xu.test.FileProvider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths" />
        </provider>

在res下创建一个xml文件,在xml文件下创建file_paths.xml文件

<paths>
<external-path
    name="files_root"
    path="Android/data/cn.soujianzhu/" />
<external-path
    name="external_storage_root"
    path="." />
</paths>

这里在安装apk包时也要对应上

 //安装程序
    protected void installApk(File file) {
    
    

        if (!file.exists()) {
    
    
            Toast.makeText(this, "下载的安装包不存在", Toast.LENGTH_SHORT).show();
            return;
        }
        //判读版本是否在7.0以上 todo 这里是7.0安装是会出现解析包的错误
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    
    

            // todo 在AndroidManifest中的android:authorities值  当前应用的包名:cn.xu.test+FileProvider(数据共享)
            Uri apkUri = FileProvider.getUriForFile(this,
                    "cn.xu.test.FileProvider", file);
            Intent install = new Intent(Intent.ACTION_VIEW);
            install.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            //添加这一句表示对目标应用临时授权该Uri所代表的文件
            install.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            install.setDataAndType(apkUri, "application/vnd.android.package-archive");
            this.startActivity(install);

        } else {
    
    
            Intent install = new Intent(Intent.ACTION_VIEW);
            install.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
            install.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            this.startActivity(install);
        }

    }

五、这个情况一般在Android10会发生下载失败
在Mainfest Application中加入这一行android:requestLegacyExternalStorage=“true”

    <manifest ... >
      <!-- This attribute is "false" by default on apps targeting
           Android 10 or higher. -->
      <application android:requestLegacyExternalStorage="true" ... >
        ...
      </application>
    </manifest>
    

好啦,目前就总结到这里,这是我撸代码过程中所遇到的问题,后续如果还会有其他方面的问题,我也会持续更新!

猜你喜欢

转载自blog.csdn.net/qq_42221857/article/details/119320344