Edited at

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

More than 5 years have passed since last update.

共有させるのは、文字列だけですがこんな感じにしてます。

もしアプリが入っていなかったらGooglePlayでそのアプリをDLさせに行きます。

Facebookはアプリ側から投稿の文字は、ポリシーとしてアプリ側で入れてはいけない(入れられない)ので、共有したいURLを入れてます。

https://developers.facebook.com/policy/

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

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