美文网首页
适配Android 7.0的打开apk报错解决方案

适配Android 7.0的打开apk报错解决方案

作者: _大洲 | 来源:发表于2017-05-19 11:39 被阅读1866次

    APP检查更新应该是最常用的功能之一了吧;基本每个APP都会有的
    然而我们很多时候还是会遇到一些坑,比如Android 6.0跟7.0的权限问题

    首先Android 6.0的权限问题我就不说了,在下载文件的时候先申请系统的权限。
    比如说这样:java.io.FileNotFoundException: /storage/emulated/0/updata.apk (Permission denied)

    这时候你需要考虑是否有申请读写权限了

    当然申请权限可以解决上面的问题

    说说在Android 7.0上面遇到的问题吧
    首先还是得有读写权限;
    还有一个就是在Android 7.0上会遇到:android.os.FileUriExposedException: file:///storage/emulated/0/updata.apk exposed beyond app through Intent.getData()

    QQ截图20170519111057.png

    解决办法:
    1.在AndroidManifest.xml中添加如下代码

    <provider
                android:name="android.support.v4.content.FileProvider"
                android:authorities="你的APP包名.fileprovider"
                android:exported="false"
                android:grantUriPermissions="true">
                <meta-data
                    android:name="android.support.FILE_PROVIDER_PATHS"
                    android:resource="@xml/file_paths" />
            </provider>
    

    注意:
    android:authorities=你的包名.fileprovider
    android:grantUriPermissions=true 表示授予 URI 临时访问权限
    @xml/file_paths 这里的file_paths就是我们要添加的xml文件名称了

    2.在res文件夹目录下新建一个 xml文件夹,并在文件夹内新建一个名为file_paths.xml的文件(这样)

    QQ截图20170519111847.png

    3.打开file_paths.xml文件添加以下内容

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <paths>
            <external-path path="Android/data/你的APP包名/" name="files_root"/>
            <external-path path="." name="external_storage_root"/>
        </paths>
    </resources>
    

    注意:
    external-path path="Android/data/你的APP包名/" 表示授权访问路径
    name="files_root" 表示路径名称

    4.修改代码部分,适配Android 7.0

            Intent intent = new Intent();
            //执行动作
            intent.setAction(Intent.ACTION_VIEW);
            //判断是否是AndroidN以及更高的版本,兼容7.0以上安卓版本
            if(Build.VERSION.SDK_INT>= Build.VERSION_CODES.N) {
                Uri contentUri = FileProvider.getUriForFile(context,"你的APP包名.fileprovider",file);
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
                intent.setDataAndType(contentUri,"application/vnd.android.package-archive");
            }else{
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                intent.setDataAndType(Uri.fromFile(file),"application/vnd.android.package-archive");
            }
            context.startActivity(intent);
    

    到这里是不是Android 7.0的适配好用了,是不是。

    如果有遇到相机适配的可以看我的另外一篇文章
    解决Android 7.0(N)调用相机报错

    相关文章

      网友评论

          本文标题:适配Android 7.0的打开apk报错解决方案

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