LoginSignup
99
102

More than 5 years have passed since last update.

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

Last updated at Posted at 2014-09-30

共有させるのは、文字列だけですがこんな感じにしてます。
もしアプリが入っていなかったら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);
    }
}
99
102
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
99
102