LoginSignup
29
31

More than 5 years have passed since last update.

IntentでSocialにSENDするエトセトラ

Posted at

AndroidのFacebook公式アプリが ナゼか ACTION_SENDでメッセージを ウォールに書こうとしても
リンクしか設定できないので 試行錯誤する事になりました

今回行う事

SNSへの投稿をするために、Intentを使う
その際、シェアしたい文字列を EXTRAに格納しておく

暗黙的インテント

Androidには おなじみの便利な暗黙的インテント機能があります
今回の場合は ACTION_SENDを受け取るアプリ一覧を表示し
選択させる

SNSへのシェアは ACTION_SENDを受け取る
ACTION_SENDの場合は setTypeが必須
ExTRAへの出力は putExtraを使う

anmoku.java
Intent intent = new Intent( Intent.ACTION_SEND )            
  .setType( "text/plain" )
  .putExtra( Intent.EXTRA_TEXT, "こんにちわ せかい!" );
startActivity(intent);

これで、ACTION_SENDに対応した Activity一覧が表示され
アプリを選択すると、たいていのアプリはデフォルトで
putExtraで設定したメッセージが入ってる!
今回はなんとなく twiccaで行う

実行するとlogcatに

START u0 {act=android.intent.action.SEND typ=text/plain flg=0x3000001 cmp=jp.r246.twicca/.statuses.Send (has clip) (has extras)}

このように、jp.r246.twicca の .statuses.sendアクティビティー に対して
ACTION_SEND text/plain EXTRA が正しく渡ってます

明示的インテント (getLaunchIntentForPackage)

明示的インテントとは、パッケージ名を指定し選択画面を出さず特定のアプリを起動させる事
よくチュートリアルにあるのは

meiji.java
PackageManager pm = getPackageManager();
Intent intent = pm.getLaunchIntentForPackage( "jp.r246.twicca" )      
startActivity(intent);

これだと 単純にアプリが起動するだけなので、EXTRA等を追加してみる

meiji2.java
PackageManager pm = getPackageManager();
Intent intent = pm.getLaunchIntentForPackage( "jp.r246.twicca" )      
  .setAction(Intent.ACTION_SEND)
  .setType("text/plain")
  .putExtra(Intent.EXTRA_TEXT, "こんにちわ せかい!");
startActivity(intent);

上記と同じく 単純にアプリが起動するだけで、EXTRAのデータが取得されない

logcatを確認すると
START u0 {act=android.intent.action.SEND cat=[android.intent.category.LAUNCHER] typ=text/plain flg=0x3000001 pkg=jp.r246.twicca cmp=jp.r246.twicca/.timelines.Home (has clip) (has extras)}

ACTION_LAUNCHER .timelines.Homeアクティビティー。
getLaunchIntentForPackage で指定してるので当然ですね
通常の起動しかしません

ので、この方法では ACTION_SENDをちゃんと渡せないので別の方法を試します

パッケージ名とアクティビティー名指定 (ComponentName使用)

こういう時のために、起動時のアクティビティーも指定できます
ACTION_SENDを受け取るアクティビティー名の取得方法は 別記事にて!

twiccaの場合は ACTION_SENDを受け取るものは
パッケージ名 jp.r246.twicca
アクティビティー名 jp.r246.twicca.statuses.Send
なので

meiji.java
ComponentName component = new ComponentName( "jp.r246.twicca", "jp.r246.twicca.statuses.Send" );

Intent intent = new Intent(Intent.ACTION_SEND)
    .setComponent(component)
    .setAction(Intent.ACTION_SEND)
    .setType("text/plain")
    .putExtra(Intent.EXTRA_TEXT, "こんにちわ せかい!");
startActivity(intent);

パッケージ名とアクティビティー名を引数に ComponentNameを作り
setComponentで渡します

logcatでは
START u0 {act=android.intent.action.SEND typ=text/plain flg=0x3000001 cmp=jp.r246.twicca/.statuses.Send (has clip) (has extras)}

キタ━━━━━━(・∀・)━━━━━━!!!!

29
31
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
29
31