AndroidのIntentからtwitter起動して画像だけシェアしてみた

AndroidのIntentからこういうことを実現したい

  • TwitterとかSNSを起動
  • 画像だけをシェアさせたい
  • アプリ連携も不要でやりたい
  • とにかく画像単体をシェア

こういうことって不可能だと思ってました。

アプリ連携が必要なのかなと思ったり

でも実は画像単体でやる方法があったので、
IntentからTwitterとかに画像シェアする方法をまとめ。

画像単体をInetntからシェアする手順とコード例

こういった手順で上手くいきました。

手順1.画像保存のパーミッションを付与する

まずパーミッションの追加から

次の2つが必要になります。

  • READ_EXTERNAL_STORAGE
  • WRITE_EXTERNAL_STORAGE

シェアする時にこの2つが必要でした。

実際にはAndroidManifest.xmlに記入します。

▼ パーミッション追加のコード例

外部ストレージへの読み書きを許可。

でもこれだけで十分なのはAPIレベル23未満の環境のみです。APIレベル23以上からは許可ダイアログの表示も必要になった模様です。詳しくは次記事などを参照

コード自体はなんてことないです。

ほんの数行のコードを追加すればOK

手順2.シェア画像を外部キャッシュに一時保存する

お次はシェアする画像の保存

一時的なものの、やはり画像保存は必要です。

なのでキャッシュディレクトリを利用します。

▼ このようなコードを書いてみた

何をしているかは細かく解説しません。

大事なのは保存画像(ここではBitmap)を getExternalCacheDir()  のキャッシュディレクトリに保存し、画像シェアする時の一時的なファイルを作ってることですね。

あと外部キャッシュは全アプリに解放されてます。だからファイル名を重複させないために UUID を使ってファイル名を生成してます。(関係ありそうな記事 : https://pisuke-code.com/web-create-absolutely-unique-id/

自分の環境に応じて色々書き換えてください。

手順3.Intent起動してTwitterなどに画像共有

最後にIntentからTwitterとかの外部アプリ起動

ここでは次のようなコードを書いてみました。

▼ 画像共有のIntent起動コード例

画像共有なので Intent.ACTION_SEND  を指定するのは当然。

でも今回は画像単体をシェアしてほしいので intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file));  のようなパラメーターを渡してます。画像URIを Intent.EXTRA_STREAM  に渡すのがポイント

後は特に大事なところはなし。

実際にTwitterで画像単体をシェアした所...

こういう感じでできました。

▼ いつものようにシェア画面が出てくる

画像シェアIntentを立ち上げた時の様子。画像シェア可能なアプリ一覧からTwitterを選ぶと...

▼ 画像単体でツイートできた!

本文なしで画像だけのツイートができた!Twitter認証とかも必要なし

Twitterアプリとかの設定も必要なし

画像シェアのやり方って意外と簡単みたいです。

ここまでのTwitterへの画像シェアの全体コード

全体のコードを載せておきます。

▼ Activity内にて以下コードを追加

環境に合わせて書き換えが必要です。そのままコピペではたぶんエラーが出てしまうのでご注意(笑)多分大丈夫だろうと思うけど、念のために付け加えておきます。

以上、AndroidでIntentから画像シェアでした。

もし間違いがあればご指摘を。ではまた(@^^)/~~~