【发布时间】:2017-10-17 12:10:47
【问题描述】:
我正在使用FileProvider API 来共享实际存储在内部存储中的内容。
以下是我的 xml 配置,它与 Manifiest 文件中配置的 Provider 链接。
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<cache-path name="xs_audio" path="/audio/records"/>
</paths>
我用来分享的代码如下:
private final static String FILE_PROVIDER = BuildConfig.APPLICATION_ID + ".fileprovider";
private String testPackageAppHaveAccess = "com.whats";
public static void shareDocument(Activity activity, CallRecordData data) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND_MULTIPLE);
intent.putExtra(Intent.EXTRA_SUBJECT, "Record File");
intent.setType("audio/*");
ArrayList<Uri> files = new ArrayList<>();
//for (AudioModelObj image : data.getDocuments()) {
files.add(getImageUri(activity, data.getFile()));
//}
activity.grantUriPermission(testPackageAppHaveAccess, files.get(0), Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, files);
activity.startActivity(Intent.createChooser(intent, "Share Audio File."));
}
private static Uri getImageUri(Activity activity, String audioURI) {
if (Build.VERSION.SDK_INT < 24) {
return Uri.parse(audioURI);
} else {
URI uri = URI.create(audioURI);
File file = new File(uri);
return FileProvider.getUriForFile(activity, FILE_PROVIDER, file);
}
}
}
但是在使用应用程序启动时,它没有附加任何东西。如果是gmail,它会说“无法附加空文件”。文件已确认可用,因为我正在显示文件列表并正在播放。
供参考:从 getImageUri(..) 生成的 Uri 是
/data/user/0/com.xl.cl.debug/cache/audio/records/17-10-17_170728_abc_.wav
任何建议我做错了什么?
【问题讨论】:
-
Google 的 FileProvider 杂乱无章,好像是初级开发人员设计的一样。 Google 自称是 Android 的终极权威,但它连基本的能力都没有……
标签: android audio android-intent android-fileprovider android-sharing