我在Android 4.0.4上运行此代码。
// Create the new Intent using the 'Send' action.
Intent share = new Intent(Intent.ACTION_SEND);
// Set the MIME type
share.setType(type);
// Create the URI from the media
java.io.File media = new java.io.File(mediaPath);
Uri uri = Uri.fromFile(media);
// Add the URI and the caption to the Intent.
share.putExtra(Intent.EXTRA_STREAM, uri);
share.putExtra(Intent.EXTRA_TEXT, caption);
// Broadcast the Intent.
mActivity.startActivity(Intent.createChooser(share, "Share to"));
但是在Android 4.4.2上它崩溃了Facebook应用程序。 Facebook应用程序打开,图像未显示,FB应用程序已死亡。
在日志转储中,我注意到了这条消息:
E/JHEAD ( 5850): can't open '/data/data/cz.volten.brili.android.free/files/product_preview_shared.jpg'
V/ContextImpl( 5850): ----- packageName = com.facebook.katana is NOT LOCKED -----
原因可能是某些安全限制,例如: FB应用程序无权访问应用程序文件夹中的图像,即使它是从intent?
调用的如果是这样,应用程序之间共享图像的适当位置是什么?
我应该使用这样的东西:how to share image to facebook via intent
答案 0 :(得分:1)
这是我通常使用的
private void initShareIntent(String type) {
boolean found = false;
Intent share = new Intent(android.content.Intent.ACTION_SEND);
share.setType("image/jpeg");
// gets the list of intents that can be loaded.
List<ResolveInfo> resInfo = getPackageManager().queryIntentActivities(share, 0);
if (!resInfo.isEmpty()) {
for (ResolveInfo info : resInfo) {
if (info.activityInfo.packageName.toLowerCase().contains(type) ||
info.activityInfo.name.toLowerCase().contains(type)) {
share.putExtra(Intent.EXTRA_TEXT, "Elevator Express");
share.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(imagePath))); // Optional, just if you wanna share an image.
share.setPackage(info.activityInfo.packageName);
found = true;
break;
}
}
if (!found) {
Toast.makeText(getApplicationContext(), "Facebook does not exist", Toast.LENGTH_SHORT).show();
return;
}
startActivity(Intent.createChooser(share, "Select"));
}
}
并将其称为:
iniShareIntent("face");
答案 1 :(得分:1)
原因可能是某些安全限制,例如: FB应用程序无权访问应用程序文件夹中的图像,即使它是从intent?
调用的
正确。该图片位于internal storage上,适用于您的应用。
如果是这样,应用程序之间共享图像的适当位置是什么?
您可以坚持使用内部存储,但您需要使用a FileProvider
(可能还有my LegacyCompatCursorWrapper
)来提供文件。 This sample app证明了这一点,尽管有PDF而不是图像。
或者,将文件放在external storage上。
我应该使用这样的东西:如何通过意图分享图像到脸书
与使用FileProvider
相比,你可以,但这似乎有点矫枉过正。
答案 2 :(得分:0)
此代码对我有用。....这里的“ updateImage”是我的图像位置。
if (isFacebookExist()) {
if (hashClick.isChecked()) {
SharePhoto sharePhoto = new SharePhoto.Builder()
.setBitmap(updateImage)
.build();
if (ShareDialog.canShow(SharePhotoContent.class)) {
SharePhotoContent content = new SharePhotoContent.Builder()
.addPhoto(sharePhoto)
.setShareHashtag(new ShareHashtag.Builder()
.setHashtag("#HashTag")
.build())
.build();
shareDialog.show(content);
}
} else {
SharePhoto sharePhoto = new SharePhoto.Builder()
.setBitmap(updateImage)
.build();
if (ShareDialog.canShow(SharePhotoContent.class)) {
SharePhotoContent content = new SharePhotoContent.Builder()
.addPhoto(sharePhoto)
.build();
shareDialog.show(content);
}
}
} else {
showToast(" Facebook is not install.");
}
private boolean isFacebookExist() {
PackageManager pm = getPackageManager();
try {
PackageInfo info = pm.getPackageInfo("com.facebook.katana", PackageManager.GET_META_DATA);
} catch (PackageManager.NameNotFoundException e) {
return false;
}
return true;
}