AndroidのFacebook公式アプリが ナゼか ACTION_SENDでメッセージを ウォールに書こうとしても
リンクしか設定できないので 試行錯誤する事になりました
#今回行う事
SNSへの投稿をするために、Intentを使う
その際、シェアしたい文字列を EXTRAに格納しておく
##暗黙的インテント
Androidには おなじみの便利な暗黙的インテント機能があります
今回の場合は ACTION_SENDを受け取るアプリ一覧を表示し
選択させる
SNSへのシェアは ACTION_SENDを受け取る
ACTION_SENDの場合は setTypeが必須
ExTRAへの出力は putExtraを使う
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)
明示的インテントとは、パッケージ名を指定し選択画面を出さず特定のアプリを起動させる事
よくチュートリアルにあるのは
PackageManager pm = getPackageManager();
Intent intent = pm.getLaunchIntentForPackage( "jp.r246.twicca" )
startActivity(intent);
これだと 単純にアプリが起動するだけなので、EXTRA等を追加してみる
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
なので
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)}
キタ━━━━━━(・∀・)━━━━━━!!!!