在android中与whatsapp共享图像

时间:2014-07-15 12:35:51

标签: android image share whatsapp

我在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"));

3 个答案:

答案 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"));