AndroidアプリからIntentを使って、各種SNSに画像付きでシェアする実装例です。
一部の機種でしか動作確認できておらず、不完全であることをご了承下さい。
public void share(final Activity activity, final String text, final String path) { Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("text/plain"); intent.putExtra(Intent.EXTRA_TEXT, text); if (path != null) intent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://" + path)); try { activity.startActivity(intent); } catch (ActivityNotFoundException e) { Toast.makeText(activity, "Client not found.", Toast.LENGTH_LONG).show(); } }
“text/plain”の内容を開く事ができるアプリの一覧が表示され、選択することにより各アプリにテキスト・画像がプリセットされた状態で開きます。
ただしFacebookに関しては、仕様によりURLしかシェアできません。
またGmailに関しては、送信画面では画像が添付されているように見えますが、
実際に送信するとメールに画像は添付されません。
Gmailで画像が添付されるようにするには以下のように実装します。
public void share(final Activity activity, final String text, final String path) { Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("text/plain"); intent.putExtra(Intent.EXTRA_TEXT, text); try { String filepath = Images.Media.insertImage(activity.getContentResolver(), path, "screenshot.png", null); intent.putExtra(Intent.EXTRA_STREAM, Uri.parse(filepath)); activity.startActivity(intent); } catch (FileNotFoundException e1) { e1.printStackTrace(); } catch (ActivityNotFoundException e) { Toast.makeText(activity, "Client not found.", Toast.LENGTH_LONG).show(); } }
ただし、こうすると画像のコピーが作成され、明示的に削除をしない限りストレージに残り続けてしまいます。
Androidネイティブの開発に関しては全くの無知な私に、正しい実装法をご教授下さる方、お待ちしております!