我已将位图保存到内部存储中:
private String saveToInternalSorage(Bitmap bitmapImage){
ContextWrapper cw = new ContextWrapper(mContext);
// path to /data/data/yourapp/app_data/imageDir
File directory = cw.getDir("imageDir", Context.MODE_PRIVATE);
// Create imageDir
File mypath=new File(directory,"profile.jpg");
FileOutputStream fos = null;
try {
fos = new FileOutputStream(mypath);
// Use the compress method on the BitMap object to write image to the OutputStream
bitmapImage.compress(Bitmap.CompressFormat.PNG, 100, fos);
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
return directory.getAbsolutePath();
}
现在我想与之分享:
Intent sharingIntent = new Intent(Intent.ACTION_SEND);
sharingIntent.putExtra(Intent.EXTRA_STREAM, file);
sharingIntent.setType("image/jpeg");
getContext().startActivity(Intent.createChooser(sharingIntent,"Erfolg teilen!"));
如何获取内部存储的位图并将其“制作”为“文件”,我可以分享?
我尝试加载它:
ContextWrapper cw = new ContextWrapper(mContext); File directory = cw.getFilesDir(); File file = new File(directory, "profile.jpg");
但这不起作用,如果我想分享它就没有显示图片(在Facebook上说它无法加载图像)。 保存方法是否正确?
答案 0 :(得分:1)
将mode_private
更改为mode_world_readable
同样改变:
File directory = cw.getFilesDir();
致:
cw.getDir ("profile.jpg", Context.MODE_WORLD_READABLE);
答案 1 :(得分:0)
我已使用
将位图保存到内部存储
ContextWrapper
没有明显的价值。
如何获取内部存储的位图和"使其成为"到一个"文件",我可以分享?
您已将其作为文件提供。这就是saveToInternalSorage()
的作用。
要使其可分享,use FileProvider
。但是,您可能需要从getDir("imageDir", Context.MODE_PRIVATE)
切换为使用以getFilesDir()
为根的内容。
答案 2 :(得分:0)
根据documentation EXTRA_STREAM应包含一个URI,其中包含与Intent关联的数据流。
因此,在您的示例中,将文件替换为 Uri.fromFile(file):
Intent sharingIntent = new Intent(Intent.ACTION_SEND);
sharingIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file));
sharingIntent.setType("image/jpeg");
您可能还需要授予此意图权限的收件人对URI执行读取操作:
sharingIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
答案 3 :(得分:0)
我遇到了这个问题。我使用Context.getFilesDir()
来保存我的位图(并避免请求写入权限)。您需要在清单中使用文件提供程序
这是我的文件提供者
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
我的路径,我正在使用一个名为Screenshots的子文件夹
<paths>
<files-path
name="my_images"
path="Screenshots/" />
</paths>
然后您可以使用此意图来共享位图(Im suing kotlin)
val shareIntent = Intent(Intent.ACTION_SEND)
.apply {
type = "image/jpeg"
putExtra(Intent.EXTRA_STREAM, FileProvider.getUriForFile(applicationContext, BuildConfig.APPLICATION_ID, file))
addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
}
startActivity(Intent.createChooser(shareIntent, "Share Image"));
更多信息: https://developer.android.com/reference/android/support/v4/content/FileProvider.html#Permissions