Android N安装apk报错:android.os.FileUriExposedException

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android N安装apk报错:android.os.FileUriExposedException相关的知识,希望对你有一定的参考价值。

StackOverflow: http://stackoverflow.com/questions/38200282/android-os-fileuriexposedexception-file-storage-emulated-0-test-txt-exposed

1.在AndroidMainifest.xml文件中添加:

<provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="${applicationId}.provider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/provider_paths"/>
</provider>

###:

authorities:app的包名.fileProvider 
grantUriPermissions:true,表示授予 URI 临时访问权限 
exported:false 
resource:下一步添加的文件

2.在res下新建一个名为xml的文件家,再新建文件provider_paths:

<?xml version="1.0" encoding="utf-8"?>
<paths>
    <external-path
        name="files_root"
        path="Android/data/com.example.downloadapk/"/>
    <external-path
        name="external_storage_root"
        path="."/>
</paths>

###:

path:需要临时授权访问的路径(.代表所有路径) 
name:给访问路径命名

3.安装apk文件:

   /**
     * 安装apk文件
     *
     * @param apkFile 安装包所在目录
     */
    private void installApk(File apkFile) {
        Intent intent = new Intent(Intent.ACTION_VIEW);
        try {
            String[] command = {"chmod", "777", apkFile.toString()};
            ProcessBuilder builder = new ProcessBuilder(command);
            builder.start();
        } catch (IOException ignored) {
        }

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            Uri contentUri = FileProvider.getUriForFile(getApplicationContext(),
                    BuildConfig.APPLICATION_ID + ".fileProvider", apkFile);
            intent.setDataAndType(contentUri, "application/vnd.android.package-archive");
        } else {
            intent.setDataAndType(Uri.fromFile(apkFile), "application/vnd.android.package-archive");
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        }

        startActivity(intent);
    }

 





以上是关于Android N安装apk报错:android.os.FileUriExposedException的主要内容,如果未能解决你的问题,请参考以下文章

python 自动化uiautomator 测试android报错:ioerror RPC server not started

Android Studio Build APK没有报错,但是Generate signed apk报错

[android]android下apk的安装过程

导入项目后,http://schemas.android.com/apk/res/android报错

Android 8.0+ 更新安装apk失败的问题

Android Studio 没有 Generate Signed APK