【发布时间】:2017-08-23 12:15:54
【问题描述】:
我的应用中有一个功能,用户可以将图像复制到应用中。该应用程序会将添加的文件重命名为数字,向上计数,但没有任何文件扩展名。
所以基本上如果用户添加 beach.jpg,它会将文件的副本保存到路径/文件名:“/gallery/1”
我正在将一个条目保存到包含原始文件名(以及其他一些信息)的 sqlite 数据库中。
我做了一个分享功能,用户可以从网格图库中选择图片然后分享。我现在遇到的问题是,当我读取用于共享的“gallery/1”文件时,MIME 类型为空(因为没有文件扩展名)。
所以我的想法是读取文件并将原始文件名的副本保存到我的应用程序内的某个临时文件夹中,然后共享该复制的文件。 问题在于文件的 MIME 类型是“application/octet-stream”而不是“image/jpeg”。
如何重新获得文件的正确 MIME 类型?我不知道如何实现这一点。
现在的问题是,由于“octet-stream”MIME 类型,我可以选择将图像发送到的应用程序非常有限。无法从列表中选择 Whatsapp 等。
我当前的代码(sn-ps)如下所示:
private void shareFile() {
ShareCompat.IntentBuilder shareIntent = ShareCompat.IntentBuilder.from(activity);
List<Uri> uris = getSelectedImagesAllGalleries();
Log.d(TAG, "shareFile() uris size: " + uris.size());
for (Uri uri : uris) {
Log.d(TAG, "shareFile() URI: " + uri.getPath());
Log.d(TAG, "shareFile() URI TYPE: " + activity.getContentResolver().getType(uri)); // is now always "application/octet-stream"
shareIntent.setType(activity.getContentResolver().getType(uri));
shareIntent.addStream(uri);
}
startActivity(shareIntent.getIntent());
}
private List<Uri> getSelectedImagesAllGalleries() {
List<Uri> selectedImages = new ArrayList<>();
selectedImages.addAll(getSelectedImages());
return selectedImages;
}
private List<Uri> getSelectedImages() {
List<Uri> uriList = new ArrayList<>();
for (Media media : mediaList) {
Log.d(TAG, "getSelectedImages(): " + media.getOriginalFileName() + " / " + media.isSelected());
// Here I create a copy of the file using its original file name incl. its file extension
File fileToShare = mediaTools.createTemporaryFileForSharing(media, activity);
if (fileToShare.exists() && media.isSelected()) {
Uri contentUri = FileProvider.getUriForFile(activity, activity.getPackageName(), fileToShare);
uriList.add(contentUri);
}
}
return uriList;
}
提前感谢您的帮助。
【问题讨论】:
标签: android mime-types android-sharing