IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android 10版本更新失败的原因总结 -> 正文阅读

[移动开发]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>
    

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

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-08-03 17:23:32  更:2021-08-03 17:23:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/5 16:57:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码