アプリで画像を作成し、これらのソーシャルネットワーク(Facebook)、メールアプリ(Gmail)、および画像を「受信」できるその他のアプリを共有したいと考えています。
問題の原因は(私が思うに)、外部ストレージを画像のベースとして使用したくないということです。データフォルダまたはキャッシュフォルダのどちらにもアクセスするためのアクセス許可が必要ないため、どちらも使用したいと思います。
画像をファイルに書き込むために使用するコード(およびMODE_WORLD_READABLE
他のアプリが画像を読み取れるように指定します):
FileOutputStream fos = null;
try {
fos = context.openFileOutput("image.jpg", Context.MODE_WORLD_READABLE);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
} finally {
if (fos != null)
fos.close();
}
そして、これは私が画像を共有するコードです:
File internalFile = context.getFileStreamPath("image.jpg");
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(internalFile));
intent.setType("image/jpeg");
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
context.startActivity(Intent.createChooser(intent, "share"));
このソリューションは非常に簡単で、Facebookなどのアプリでは正常に機能しますが、次の場合に失敗するGmailなどでは機能しません。
file:// attachment paths must point to file:///mnt/sdcard
Gmailで動作させるための「ハック」(以下を参照)はたくさんありますが、ハッキングなしで動作する画像を共有するためのさらに良い方法があるかどうかを自問自答します。これは私が見落としていたものです。だから、質問に:
- 画像を共有するための最良の方法は何ですか?(外部記憶装置?)
- Gmailのように(誤)動作するアプリは他にありますか?(私はグーグル+でいくつかの問題を見ました)
- 他に方法がない場合:特定のアプリと共有するための特別なインテントを作成できますか?ユーザーがウォッチリストでアプリを選択したときに共有してオーバーライドするデフォルトの方法がありますか?