Gmail・Line・Facebook・Twitter 公式アプリで共有させたい時のIntentの投げ方

共有させるのは、文字列だけですがこんな感じにしてます。
もしアプリが入っていなかったらGooglePlayでそのアプリをDLさせに行きます。

Facebookはアプリ側から投稿の文字は、ポリシーとしてアプリ側で入れてはいけない（入れられない）ので、共有したいURLを入れてます。
https://developers.facebook.com/policy/

Lineは改行コードを入れるとアプリから弾かれます。

```java
import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.net.Uri;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;

public class MainActivity extends Activity {
	private final int GMAIL_ID = 0;
	private final int LINE_ID = 1;
	private final int FACEBOOK_ID = 2;
	private final int TWITTER_ID = 3;
	private final String[] sharePackages = {"com.google.android.gm","jp.naver.line.android","com.facebook.katana","com.twitter.android"};

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		// Gmail
		findViewById(R.id.gmail).setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				if(isShareAppInstall(GMAIL_ID)){
					Intent intent = new Intent(Intent.ACTION_SENDTO,Uri.parse("mailto:"));
					intent.setPackage(sharePackages[GMAIL_ID]);
					intent.putExtra(Intent.EXTRA_SUBJECT, "メールの題名");
					intent.putExtra(Intent.EXTRA_TEXT, "メールの内容");
					startActivity(intent);
				}else{
					shareAppDl(GMAIL_ID);
				}
			}
		});

		// Line 改行コードが入っていると不正なコードがはいっている旨のアラートがでて投稿できない
		findViewById(R.id.line).setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				if(isShareAppInstall(LINE_ID)){
					Intent intent = new Intent();
					intent.setAction(Intent.ACTION_VIEW);
					intent.setData(Uri.parse("line://msg/text/" + "Line本文"));
					startActivity(intent);
				}else{
					shareAppDl(LINE_ID);
				}
			}
		});

		/** facebook
		 https://developers.facebook.com/policy/ 2014/09/30確認
		 ポリシー上 Facebook公式アプリにインテントを飛ばす際は、アプリ側から投稿の文字等はアプリ側から設定出来ない
		 以下のソースは、Facebook公式アプリに共有URLしたいURLを飛ばしている それならIntentから送れる*/
		findViewById(R.id.facebook).setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				if(isShareAppInstall(FACEBOOK_ID)){
					Intent intent = new Intent();
					intent.setAction(Intent.ACTION_SEND);
					intent.setPackage(sharePackages[FACEBOOK_ID]);
					intent.setType("text/plain");
					intent.putExtra( Intent.EXTRA_TEXT, "http://www.yahoo.co.jp/");
					startActivity(intent);
				}else{
					shareAppDl(FACEBOOK_ID);
				}
			}
		});

		// Twitter
		findViewById(R.id.twitter).setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				if(isShareAppInstall(TWITTER_ID)){
					Intent intent = new Intent();
					intent.setAction(Intent.ACTION_SEND);
					intent.setPackage(sharePackages[TWITTER_ID]);
					intent.setType("image/png");
					intent.putExtra(Intent.EXTRA_TEXT, "Twitter本文");
					startActivity(intent);
				}else{
					shareAppDl(TWITTER_ID);
				}
			}
		});
	}

	// アプリがインストールされているかチェック
	private Boolean isShareAppInstall(int shareId){
		try {
			PackageManager pm = getPackageManager();
			pm.getApplicationInfo(sharePackages[shareId], PackageManager.GET_META_DATA);
			return true;
		} catch (NameNotFoundException e) {
			return false;
		}
	}

	// アプリが無かったのでGooglePalyに飛ばす
	private void shareAppDl(int shareId){
		Uri uri = Uri.parse("market://details?id="+sharePackages[shareId]);
		Intent intent = new Intent(Intent.ACTION_VIEW, uri);
		startActivity(intent);
	}
}
```