TwitterやFacebookに投稿する方法

アプリ内で加工したデータ(文章や画像)をTwitterFacebookなどのSNSに投稿したい場合にその投稿画面を開く方法を紹介します。

投稿に必要なのは次の手順です。

  1. どのSNSに投稿するか決める
  2. 投稿するSNSアプリがあるか調べる
  3. 該当するアプリをインテントから起動する

この手順でSNS投稿メソッドを作りました。

public void shareWith(String appKeyword, String message, String imagePath)
{
    List<Intent> shareIntentList = new ArrayList<Intent>();
        //起動するインテントのリスト
    List<ResolveInfo> resolveInfoList = 
        getPackageManager().queryIntentActivities(
                new Intent(Intent.ACTION_SEND).setType("image/png"), 0);
        //SNSアプリの一覧
    for(ResolveInfo info : resolveInfoList){
        Intent shareIntent = new Intent(Intent.ACTION_SEND).setType(
                "image/png");

        if(info.activityInfo.packageName.toLowerCase().contains(appKeyword)){
            shareIntent.putExtra(Intent.EXTRA_TEXT, message);
            shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(
                    new File(imagePath)));
            shareIntent.setPackage(info.activityInfo.packageName);
            shareIntentList.add(shareIntent);
        }
    }
    
    //もし該当するアプリが1つでもあれば起動する
    if(!shareIntentList.isEmpty()){
        Intent chooserIntent = Intent.createChooser(shareIntentList.remove(0), 
                getString(R.string.sns_chooser_title));
        chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, 
                                shareIntentList.toArray(new Parcelable[]{}));
        startActivity(chooserIntent);
    }
}

例えば、このメソッドを使ってTwitterに投稿したい場合は

shareWith("twitter", "posted from app.", 
        testDir.getAbsolutePath() + "/image.png");

と実行すればパッケージ名またはアプリ名にというキーワードが含まれているアプリだけを選び出し、そのアプリから直接投稿画面を表示できます。

実際にTwitterアプリを起動したときの様子が次の画像です。

twitterの投稿画面

もちろんTwitterだけでなく、探し出したいアプリに応じてキーワードを変えることができます。アプリのキーワードと起動するアプリは次のように対応しています。

キーワード起動するSNSアプリ
twitterツイッター
facebookフェイスブック
gmailGmail
mmsメール

ただし、例えば "twitter" というキーワードがもつアプリが1つ以上ある場合はそれらのアプリが複数起動します。

また、アプリがインストールされていない場合はなにも起こりません。

関連項目
プライバシーポリシー