2016-05-13 25 views
0

私はインテントを使用して画像を共有しようとしています。ここに私が作成した方法はあります画像のみWhatsappと共有しますが、Androidの他のアプリとは共有しません。

public void shareImg(int fileNum) //Consider fileNum=R.drawable.img 
{ 

    Uri uri= Uri.parse("android.resource://" 
      + context.getPackageName() + "/" + fileNum); 
    Intent share=new Intent(); 
    share.setAction(Intent.ACTION_SEND); 
    share.setType("image/*"); 
    share.putExtra(Intent.EXTRA_STREAM, uri); 
    share.putExtra(Intent.EXTRA_TEXT, "Sent Via ---"); 

    Intent chooser= Intent.createChooser(share, "Share Via"); 
    context.startActivity(chooser); 

} 

画像はキャプション付きのWhatsappで適切に共有されています。しかし、GmailやMessengerなどとアプリを共有しようとすると、Toastにエラーが表示されます。

たとえば、

Gmailが言う:空のファイルを添付することはできません

メッセンジャーは言う:あなたは共有の意図を使用して画像を共有することができ、画像

+1

いくつかのアプリケーションは '' android.resource' Uri'スキームをサポートしています。 – CommonsWare

+0

これを実現するには、まずそのリソースドロワブルをストレージに保存してからファイルURIと共有する必要があります。 –

+0

しかし、ギャラリーや他のアプリから選択すると動作します。 – ss007

答えて

0

への変換に失敗しましたが、あなたは、ローカライズされたビットマップ

に画像をデコードするためにきました
Intent intent = new Intent(Intent.ACTION_SEND); 
intent.putExtra(Intent.EXTRA_TEXT, "Hey view/download this image"); 
String path = Images.Media.insertImage(getContentResolver(), loadedImage, "", null); 
Uri screenshotUri = Uri.parse(path); 

intent.putExtra(Intent.EXTRA_STREAM, screenshotUri); 
intent.setType("image/*"); 
startActivity(Intent.createChooser(intent, "Share image via...")); 

loadedImageはここで画像

+0

申し訳ありませんが、働いていません – ss007

0

のパスは、ユーザーが実行できる手順です。

ステップ1。まず描画可能

Drawable d = ImagesArrayList.get(0); 
Bitmap bitmap = ((BitmapDrawable)d).getBitmap(); 

ステップ2からビットマップを作成します。

FileOutputStream out = null; 
String filename = Environment.getExternalStorageDirectory() + File.separator + "temporary_file.jpg"; 
try { 
    out = new FileOutputStream(filename); 
    bitmap.compress(Bitmap.CompressFormat.PNG, 100, out); // bmp is your Bitmap instance 
    // PNG is a lossless format, the compression factor (100) is ignored 
} catch (Exception e) { 
    e.printStackTrace(); 
} finally { 
    try { 
     if (out != null) { 
      out.close(); 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

ステップ3にファイルにビットマップを保存します。 fileurlでファイルします。ギャラリー画像を共有しているときと同じ画像を共有します。

完全な答え

Bitmap bitmap= BitmapFactory.decodeResource(getResources(),R.drawable.xxxx); // your resource ID here 
String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)+"/LatestShare.jpg"; 
OutputStream out = null; 
File file=new File(path); 
try { 
    out = new FileOutputStream(file); 
    bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out); 
    out.flush(); 
    out.close(); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 
path=file.getPath(); 
Uri bmpUri = Uri.parse("file://"+path); 
Intent shareIntent = new Intent(); 
shareIntent = new Intent(android.content.Intent.ACTION_SEND); 
shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
shareIntent.putExtra(Intent.EXTRA_STREAM, bmpUri); 
shareIntent.setType("image/jpg"); 
startActivity(Intent.createChooser(shareIntent,"Share with")); 
+0

申し訳ありませんが、すでに試して、うまくいきませんでした! – ss007

+0

保存中にエラーがありますか? –

+0

これはNullPointerExceptionを与えています – ss007

関連する問題