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); }

3 件のコメント:

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

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

    返信削除
  2. If you need your ex-girlfriend or ex-boyfriend to come crawling back to you on their knees (even if they're dating somebody else now) you must watch this video
    right away...

    (VIDEO) Text Your Ex Back?

    返信削除
  3. Ever wanted to get free Google+ Circles?
    Did you know that you can get these AUTOMATICALLY & ABSOLUTELY FOR FREE by using Like 4 Like?

    返信削除