Je me rends compte qu'il a été un bon moment que vous avez posé cette question et Android a un peu changé pendant cette période. Je ne suis pas sûr si vous êtes toujours à la recherche d'une réponse, mais si vous êtes, vous pouvez le faire avec la nouvelle méthode Intent.createChooser()
, qui prend un troisième argument PendingIntent.getIntentSender()
, et un BroadcastReceiver
. Voici comment faire:
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);
Notez que l'objectif de mon intention était receiver
la classe BroadcastTest
qui s'étend BroadcastReceiver
. Lorsque l'utilisateur choisit une application à partir du sélecteur, la méthode onReceive
dans BroadcastTest
sera appelée et si l'utilisateur appuie en arrière, onReceive
ne sera pas appelée. De cette façon, vous pouvez vérifier si l'utilisateur a effectivement envoyé un e-mail/sms/tweet ou s'ils ont appuyé sur. Par exemple, si cela est ma BroadcastTest
classe:
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));
}
}
}
vous obtiendrez quelque chose comme ComponentInfo{org.telegram.messenger/org.telegram.ui.LaunchActivity}
dans votre journal si l'utilisateur a sélectionné l'application Télégramme. En utilisant la touche android.intent.extra.CHOSEN_COMPONENT
, vous devriez être en mesure de trouver ce que l'utilisateur a choisi. Aussi, n'oubliez pas de déclarer le BroadcastReceiver
dans votre manifeste.
Une autre façon est d'utiliser PackageManager
et queryIntentActivities()
pour faire votre propre sélecteur. Cela vous permettrait d'obtenir par programmation la sélection de l'utilisateur. La méthode est décrite dans le message StackOverflow this.
Pour répondre à votre question sur startActivityForResult
, de source d'Android, vous pouvez voir que le Activity
qui choisit parmi Intents
ne le fait pas du tout setResult()
. Ainsi, si vous essayez d'attraper un code résultat dans onActivityResult
, il sera toujours 0 (RESULT_CANCELED
). Ainsi, en utilisant startActivityForResult
, vous ne pouvez pas déterminer si l'utilisateur a sélectionné une option ou l'a repoussée.