与ShareActionProvider共享一个图像
问题描述:
我试图通过Android的ShareActionProvider共享一个下载的位图,并且我遇到了实际将位图传递给适当的应用程序(如Messenger,Google +,Gmail)的问题。当我将意图传递给uri时,没有任何反应(图像未在第三方应用程序中填充)。与ShareActionProvider共享一个图像
这里是我的意图:
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 "";
}
}
,我用这种方法
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是file:///storage/emulated/0/myApp/cached-image.png
),并能够在那里查看图像(从设备上执行了adb pull
),尽管图像没有通过。我在日志中没有看到任何错误(没有FileNotFoundException或任何类型的错误)。这是文件权限问题吗?我无法分享到“非公开”的位置吗?
如果我将
getExternalStorageDirectory() + File.separator + "myApp";
更改为普通
getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)
它可以很好地工作......但它困扰着我,它不能以另一种方式工作:)。
任何帮助将是伟大的!
答
原来它与我没有发布的代码(惊喜,惊喜)有关。我试图在setOnShareTargetSelectedListener
中设置shareIntent ......显然你不能这样做。
我的问题是与此代码段
mShareActionProvider = (ShareActionProvider)
MenuItemCompat.getActionProvider(shareItem);
mShareActionProvider.setOnShareTargetSelectedListener(new ShareActionProvider.OnShareTargetSelectedListener() {
@Override
public boolean onShareTargetSelected(ShareActionProvider shareActionProvider, Intent intent) {
String urlKey = mImageUrlList.get(mImageGallery.getCurrentItem()) + "\n";
// This is the problem line
mShareActionProvider.setShareIntent(getImageIntent(app.getImageCache().get(urlKey)));
return false;
}
})
我不明白的问题,你需要共享图像路径还是什么? –
对不起,问题有点含糊。我更新了我的问题,但我也发现我的问题。 – loeschg