[Android]:アプリから画像付きのツイートをする

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”の内容を開く事ができるアプリの一覧が表示され、選択することにより各アプリにテキスト・画像がプリセットされた状態で開きます。

Intent一覧  Intent-Twitter  Intent-Facebook

ただし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ネイティブの開発に関しては全くの無知な私に、正しい実装法をご教授下さる方、お待ちしております!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です