2014年4月11日金曜日

Facebookとそれ以外でACTION_SENDで渡すテキストを変える

Facebookはポリシーで投稿のpre-fillを禁止している(https://developers.facebook.com/policy/)ため、テキストの代わりにリンクを共有することがよくあります。

前回の「「ギャラリーから選択」と「カメラで撮影」を1つのchooserで表示する。」と同じ方法を使うと、Facebookとそれ以外でIntent.EXTRA_TEXTに含める文字列を変えることができます。 /** * Facebook ではリンクを共有し、それ以外(FB Messenger 含む)ではテキストを共有する */ private void share() { Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("text/plain"); List<ResolveInfo> resInfo = getActivity().getPackageManager() .queryIntentActivities(intent, 0); if (resInfo.isEmpty()) { return; } String shareText = getString(R.string.share_text); String shareTextFacebook = getString(R.string.share_link); List<Intent> shareIntentList = new ArrayList<>(); for (ResolveInfo info : resInfo) { Intent shareIntent = (Intent) intent.clone(); if (info.activityInfo.packageName.toLowerCase() .equals("com.facebook.katana")) { shareIntent.putExtra(Intent.EXTRA_TEXT, shareTextFacebook); } else { shareIntent.putExtra(Intent.EXTRA_TEXT, shareText); } shareIntent.setPackage(info.activityInfo.packageName); shareIntentList.add(shareIntent); } Intent chooserIntent = Intent.createChooser(shareIntentList.remove(0), getString(R.string.select_app)); chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, shareIntentList.toArray(new Parcelable[]{})); startActivity(chooserIntent); }

1 件のコメント:

  1. shareIntent.setPackage(info.activityInfo.packageName);
    の部分は
    shareIntent.setClassName(info.activityInfo.packageName, info.activityInfo.name);
    にしておかないと、1つのapk に反応する Activity が複数ある時に期待通りの表示がされなかった。

    具体的には、 image/jpeg な Intent のときのGoogle+ でうまくいっていなかった。

    返信削除