前回の「「ギャラリーから選択」と「カメラで撮影」を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+ でうまくいっていなかった。