我正在尝试通过 Android 的 ShareActionProvider 共享下载的位图,但实际上将位图传递给适当的应用程序(例如 Messenger、Google+、Gmail)时遇到了问题。当我通过 uri 传递意图时,没有任何反应(图像未填充到 3rd 方应用程序中)。
这是我的意图:
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("image/*");
writeToDirectory(bitmap, "cached-image.png"); // write bitmap to file system in order to share
intent.putExtra(Intent.EXTRA_STREAM, getFileUri("cached-image.png"))
mShareActionProvider.setShareIntent(intent);
我目前正在使用以下方法将位图保存到文件中:
public String writeToDirectory(Bitmap bitmap, String filename) {
assert context != null;
assert bitmap != null;
assert filename != null;
// Ensure directory exists and create if not
String path = Environment.getExternalStorageDirectory() + File.separator + "myApp";
File f = new File(path);
boolean dirExists = f.isDirectory();
if (!f.isDirectory() && !f.exists()) {
dirExists = f.mkdirs();
}
if (dirExists) {
File file = new File(sharedPrivateExternalPath, filename);
try {
FileOutputStream out = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.PNG, 90, out);
out.close();
} catch (IOException ex) {
e(TAG, "Write failed!");
e(TAG, ex.getMessage());
ex.printStackTrace();
}
return file.toString();
} else {
return "";
}
}
我正在用这种方法检索 Uri
public Uri getFileUri(String filename) {
assert context != null;
assert filename != null;
String path = Environment.getExternalStorageDirectory() + File.separator + "myApp";
File file = new File(path, filename);
return Uri.fromFile(file);
}
我已经检查了文件是否被写入了适当的位置(Uri is file:///storage/emulated/0/myApp/cached-image.png
)并且能够在那里查看图像(adb pull
从设备进行),尽管图像没有通过。我在日志中看不到任何错误(没有 FileNotFoundException 或任何类似的错误)。这是文件权限问题吗?我不能分享到“非公开”位置吗?
如果我改成getExternalStorageDirectory() + File.separator + "myApp";
普通getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)
的,它可以正常工作......但它让我感到困扰,它不会以另一种方式工作:)。
任何帮助都会很棒!