FileProvider如何选择/区分provider_path.xml中的提供程序路径?

时间:2018-10-10 12:03:04

标签: android android-fileprovider android-storage

我必须使用FileProvider才能安装apk。现在一切正常,但是我不真正理解FileProvider的行为以选择在 provider_paths.xml 中定义的正确路径。这是我的代码:

Manifest.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>

main_activity.java

    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
        intent = new Intent(Intent.ACTION_VIEW);
        File apk = new File("/sdcard/example.apk");
        String fileType = "application/vnd.android.package-archive";
        intent.setDataAndType(Uri.fromFile(apk), fileType);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

    } else {
        intent = new Intent(Intent.ACTION_INSTALL_PACKAGE);
        File directory = new File(Environment.getExternalStorageDirectory().toString());
        File apk = new File(directory, "example.apk");
        Uri fileUri = FileProvider.getUriForFile(this, valoresGenerales.appContext.getPackageName() + ".provider", apk);
        String type = MimeTypeMap.getSingleton().getMimeTypeFromExtension(MimeTypeMap.getFileExtensionFromUrl(apk.getName()));
        intent.setDataAndType(fileUri, type);
        intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    }

    startActivity(intent);

provider_paths.xml

<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path name="external_files" path="." />
    <files-path name="files_path"  path="Download"/>
</paths>

FileProvider取决于什么? external_path files_path (或文件中定义的任何内容)取决于什么?

0 个答案:

没有答案