在android中与whatsapp共享图像

Shy*_*man 4 android share image whatsapp

我有资产文件夹中的图像,需要与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"));
Run Code Online (Sandbox Code Playgroud)

Shy*_*man 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;
    }
}
Run Code Online (Sandbox Code Playgroud)


Com*_*are 6

你有几个问题.

首先,在任何版本的Android上file:///assets/都不是有效Uri的.您自己的应用程序可以通过引用自己的资产file:///android_asset/.

其次,只有您可以访问自己的资产file:///android_asset/- 您无法将此类内容传递Uri给第三方应用.将文件从资产复制到内部存储和使用FileProvider,或者您可以尝试StreamProvider并尝试直接共享数据assets/.

第三,不保证com.whatsapp设备上存在,或者com.whatsapp支持MIME类型为ACTION_SENDfile:/// Uriimage/*,因此您可能会崩溃ActivityNotFoundException.

第四,用户可能希望通过除WhatsApp之外的其他方式来共享此图像.请允许用户通过删除setPackage()您的呼叫来分享用户想要的位置Intent.