この質問をしてからかなり時間が経ちましたが、この間に Android はかなり変化しました。あなたがまだ答えを探しているかどうかはわかりませんが、もしそうなら、3 番目の引数Intent.createChooser()
を取る新しいメソッドと. 方法は次のとおりです。PendingIntent.getIntentSender()
BroadcastReceiver
Intent sendMailIntent = new Intent(Intent.ACTION_SEND);
sendMailIntent.putExtra(Intent.EXTRA_SUBJECT, getString(R.string.Share_Mail_Subject));
sendMailIntent.putExtra(Intent.EXTRA_TEXT, getString(R.string.Share_Mail_Text));
sendMailIntent.setType("text/plain");
Intent receiver = new Intent(this, BroadcastTest.class);
receiver.putExtra("test", "test");
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, receiver, PendingIntent.FLAG_UPDATE_CURRENT);
Intent chooser = Intent.createChooser(intent, "test", pendingIntent.getIntentSender());
startActivity(chooser);
receiver
私の意図のターゲットは、BroadcastTest
拡張するクラスであることに注意してくださいBroadcastReceiver
。ユーザーがセレクターからアプリケーションを選択すると、onReceive
メソッドが呼び出されます。BroadcastTest
ユーザーが押し戻すと、メソッドは呼び出さonReceive
れません。このようにして、ユーザーが実際にメール/SMS/ツイートを送信したかどうか、または彼らが押し返したかどうかを確認できます。たとえば、これが私のBroadcastTest
クラスの場合:
public class BroadcastTest extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
for (String key : intent.getExtras().keySet()) {
Log.d(getClass().getSimpleName(), " " + intent.getExtras().get(key));
}
}
}
ComponentInfo{org.telegram.messenger/org.telegram.ui.LaunchActivity}
ユーザーがアプリケーション Telegram を選択した場合、ログに次のようなものが表示されます。key を使用するandroid.intent.extra.CHOSEN_COMPONENT
と、ユーザーが選択したものを見つけることができるはずです。BroadcastReceiver
また、マニフェストでを宣言することを忘れないでください。
別の方法は、独自のセレクターを使用PackageManager
して作成することです。queryIntentActivities()
これにより、ユーザーの選択をプログラムで取得できます。このメソッドは、このStackOverflow の投稿で説明されています。
に関するあなたの質問に答えるために、Android の情報源から、 の中から選択するがまったくないstartActivityForResult
ことがわかります。したがって、結果コードを でキャッチしようとすると、常に 0 ( ) になります。したがって、 を使用すると、ユーザーがオプションを選択したのか、押し戻したのかを判断できません。Activity
Intents
setResult()
onActivityResult
RESULT_CANCELED
startActivityForResult