我在assets文件夹中有图像,需要与whatsapp应用程序共享
我试过这段代码,它一直让我分享失败再试一次!怎么了?!
Intent share = new Intent(Intent.ACTION_SEND);
share.setType("image/*");
share.setPackage("com.whatsapp");
// share.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File("file:///assets/epic/adv.png")));
share.putExtra(Intent.EXTRA_STREAM, Uri.parse("file:///assets/epic/adv.png"));
this.startActivity(Intent.createChooser(share, "share_via"));
答案 0 :(得分:10)
这个通过whatsapp共享图像的代码对我来说很好。
public void shareImageWhatsApp() {
Bitmap adv = BitmapFactory.decodeResource(getResources(), R.drawable.adv);
Intent share = new Intent(Intent.ACTION_SEND);
share.setType("image/jpeg");
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
adv.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
File f = new File(Environment.getExternalStorageDirectory()
+ File.separator + "temporary_file.jpg");
try {
f.createNewFile();
new FileOutputStream(f).write(bytes.toByteArray());
} catch (IOException e) {
e.printStackTrace();
}
share.putExtra(Intent.EXTRA_STREAM,
Uri.parse( Environment.getExternalStorageDirectory()+ File.separator+"temporary_file.jpg"));
if(isPackageInstalled("com.whatsapp",this)){
share.setPackage("com.whatsapp");
startActivity(Intent.createChooser(share, "Share Image"));
}else{
Toast.makeText(getApplicationContext(), "Please Install Whatsapp", Toast.LENGTH_LONG).show();
}
}
private boolean isPackageInstalled(String packagename, Context context) {
PackageManager pm = context.getPackageManager();
try {
pm.getPackageInfo(packagename, PackageManager.GET_ACTIVITIES);
return true;
} catch (NameNotFoundException e) {
return false;
}
}
答案 1 :(得分:6)
你有几个问题。
首先,file:///assets/
在任何Android版本上都不是有效Uri
。您自己的应用程序可以通过file:///android_asset/
引用自己的资产。
其次,只有您可以通过file:///android_asset/
访问自己的资源 - 您无法将此类Uri
传递给第三方应用。将资产中的文件复制到内部存储中并使用FileProvider
,或者您可以尝试my StreamProvider
并尝试直接从assets/
共享数据。
第三,无法保证设备上存在com.whatsapp
,或com.whatsapp
将支持ACTION_SEND
file:///
个MIME类型的值Uri
image/*
的{{1}},因此您可能会遇到ActivityNotFoundException
。
第四,用户可能希望通过WhatsApp之外的其他方式共享此图像。 Please allow the user to share where the user wants移除setPackage()
来自Intent
的电话。
答案 2 :(得分:2)
这对我有用
Bitmap imgBitmap=BitmapFactory.decodeResource(getResources(),R.drawable.image);
String imgBitmapPath= MediaStore.Images.Media.insertImage(getContentResolver(),imgBitmap,"title",null);
Uri imgBitmapUri=Uri.parse(imgBitmapPath);
Intent shareIntent=new Intent(Intent.ACTION_SEND);
shareIntent.setType("image/*");
shareIntent.putExtra(Intent.EXTRA_STREAM,imgBitmapUri);
startActivity(Intent.createChooser(shareIntent,"share image using"));