前回の「「ギャラリーから選択」と「カメラで撮影」を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);
- }
shareIntent.setPackage(info.activityInfo.packageName);
返信削除の部分は
shareIntent.setClassName(info.activityInfo.packageName, info.activityInfo.name);
にしておかないと、1つのapk に反応する Activity が複数ある時に期待通りの表示がされなかった。
具体的には、 image/jpeg な Intent のときのGoogle+ でうまくいっていなかった。