读取内容URI时出现Android FileNotFound异常

时间:2019-10-07 06:34:49

标签: java android

我正在使用内容提供商将文件从一个(发送方)应用程序共享到另一个(接收方)应用程序。在发件人应用程序中,我有一个文件存储在内部存储器中。我正在使用发件人应用程序端的以下代码创建内容URI:

                try {
                        File file = new File(path); //path is file path which is stored in internal storage
                        if (file.exists()) {
                            String uri = FileProvider.getUriForFile(DispatcherApp.mContext, AUTHORITY, file).toString();
                            intent.putExtra("uri", uri);
                            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    } 

发件人端的清单文件提供者代码:

<provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="net.rhei.btchat"
            android:exported="false"
            android:process="@string/process"
            android:grantUriPermissions="true">

            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/provider_paths" />

        </provider>

provider_path文件内容:

<paths>
    <external-path
        name="share_images"
        path="Android/data/net.rhei.btchat/files/Pictures" />

    <external-path
        name="external_files"
        path="." />

    <files-path
        name="files"
        path="/" />

    <cache-path
        name="cache"
        path="/" />

    <external-files-path
        name="external_files"
        path="." />


    <external-cache-path
        name="external_cache"
        path="." />

    <files-path
        name="allfiles"
        path="/" />
    <files-path
        name="tmp"
        path="tmp/" />

</paths>

使用此代码,我得到的文件uri像这样:  内容://net.rhei.btchat/files/shared/1/1569942820242

在接收方应用程序端,我正在使用以下代码读取文件内容:

收件人端的清单文件提供者代码:

<provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="com.droidipc.androidipcpoc"
            android:exported="false"
            android:process="@string/process"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/provider_paths" />
        </provider>

使用以下代码读取文件内容:

                        Uri mUri = Uri.parse(file_uri); // here I'm getting file_uri = content://net.rhei.btchat/files/shared/1/1569942820242
                        String packageName = "com.droidipc.androidipcpoc";
                        context.grantUriPermission(packageName, mUri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);
                        try {
                            InputStream is = context.getContentResolver().openInputStream(mUri);
                            is.close();
                        } catch (Exception e) {
                            Log.e(SocketHandler.class.getSimpleName(), e.getMessage());
                            e.printStackTrace();
                        }

使用上述URI打开输入流时出现FileNotFound异常。

0 个答案:

没有答案
相关问题