Skip to content

Instantly share code, notes, and snippets.

@ueno-yuhei
Last active August 29, 2015 14:07
Show Gist options
  • Save ueno-yuhei/2892e9be68a567d4ca52 to your computer and use it in GitHub Desktop.
Save ueno-yuhei/2892e9be68a567d4ca52 to your computer and use it in GitHub Desktop.
Gmail・Line・Facebook・Twitter 公式アプリで共有させたい時のIntentの投げ方 ref: http://qiita.com/ueno-yuhei/items/f5c7b36e2931a9da143f
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);
}
}
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);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment