如何使用FileProvider共享图像文件。 我的应用程序在files / attach目录中有一个图像文件,我要共享该文件。我正在使用FileProvider让Uri分享。但是,我收到了“java.lang.IllegalArgumentException”。
private void shareNote() {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_SUBJECT, shareNote.getTitle());
intent.putExtra(Intent.EXTRA_TEXT, shareNote.getTitle());
intent.setType("image/*");
File attachFile = new File(shareFile.getFilePath());
//FileProvider.getUriForFile() throws a "java.lang.IllegalArgumentException" Exception.
Uri attachUri = FileProvider.getUriForFile(getContext(), "com.demoapp.rs.mynotebook.fileprovider", attachFile);
intent.putExtra(Intent.EXTRA_STREAM, attachUri);
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
getContext().startActivity(intent);
}
的AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.demoapp.rs.mynotebook">
<application>
<uses-permission android:name="android.permission.READ_CALENDAR" />
<uses-permission android:name="android.permission.WRITE_CALENDAR" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<application ...>
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.demoapp.rs.mynotebook.fileprovider"
android:exported="false"
android:grantUriPermissions="true"
>
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/filepaths" />
</provider>
</application>
</manifest>
filepaths.xml
<paths>
<files-path name="ifiles" path="attach/"/>
<external-path name="ifiles" path="attach/" />
</paths>
共享图像文件位于目录“/data/data/com.demoapp.rs.mynote/files/attach/F2000001.png” 例外情况:
java.lang.IllegalArgumentException:找不到配置的root 包含 /data/data/com.demoapp.rs.mynote/files/attach/F2000001.png 在android.support.v4.content.FileProvider $ SimplePathStrategy.getUriForFile(FileProvider.java:678) 在android.support.v4.content.FileProvider.getUriForFile(FileProvider.java:377) 在com.demoapp.rs.component.ShareNoteDialog.shareNote(ShareNoteDialog.java:107) 在com.demoapp.rs.component.ShareNoteDialog.access $ 000(ShareNoteDialog.java:29) 在com.demoapp.rs.component.ShareNoteDialog $ 1.onItemClick(ShareNoteDialog.java:72) ...
答案 0 :(得分:0)
然后我修改这样的代码:
private void shareNote() {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_SUBJECT, shareNote.getTitle());
intent.putExtra(Intent.EXTRA_TEXT, shareNote.getTitle());
intent.setType("image/*");
// File attachFile = new File(shareFile.getFilePath());
// Uri attachUri = FileProvider.getUriForFile(getContext(), "com.demoapp.rs.mynotebook.fileprovider", attachFile);
// intent.putExtra(Intent.EXTRA_STREAM, attachUri);
Uri attachFileUri = Uri.parse("content://com.demoapp.rs.mynotebook.fileprovider/ifiles/F2000001.png");
intent.putExtra(Intent.EXTRA_STREAM, attachFileUri);
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
getContext().startActivity(intent);
}
然后我成功发送电子邮件,但电子邮件没有附加的共享图像文件。
答案 1 :(得分:0)
我再次修改代码。 我使用原始Java代码,并修改filepaths.xml文件,如下所示:
<paths>
<files-path name="ifiles" path="attach/"/>
<!--<external-path name="ifiles" path="attach/" />-->
</paths>
然后我可以发送电子邮件,我可以在发送邮件用户界面看到附件和文件大小!
但是在我打开收到的电子邮件后,没有附件。为什么呢?
答案 2 :(得分:0)
我使用FileProvider,AbstractFileProvider和来自https://github.com/commonsguy/cw-omnibus/tree/master/ContentProvider/Files的AndroidManifest.xml中的配置,它可以正常工作。但是当某些电子邮件服务器没问题时,有些电子邮件服务器无法获取共享文件。我不知道为什么。