Я понимаю, что прошло много времени с тех пор, как вы задали этот вопрос, и Android за это время сильно изменился. Я не уверен, что вы все еще ищете ответ, но если да, вы можете сделать это с помощью нового метода 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
не будет вызываться. Таким образом, вы можете проверить, действительно ли пользователь отправил электронное письмо / смс / твит или нажал на него обратно. Например, если это мой 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. Используя ключ android.intent.extra.CHOSEN_COMPONENT
, вы сможете найти то, что выбрал пользователь. Кроме того, не забудьте указать BroadcastReceiver
в своем манифесте.
Другой способ - использовать PackageManager
и queryIntentActivities()
, чтобы сделать свой собственный селектор. Это позволит вам программно получить выбор пользователя. Метод описан в этом Сообщение на StackOverflow.
Чтобы ответить на ваш вопрос о startActivityForResult
из источника Android, вы можете увидеть, что Activity
, который выбирает из Intents
, вообще не setResult()
. Таким образом, если вы попытаетесь поймать код результата в onActivityResult
, он всегда будет 0 (RESULT_CANCELED
). Таким образом, используя startActivityForResult
, вы не можете определить, выбрал ли пользователь опцию или вернулся назад.
person
Ishita Sinha
schedule
13.07.2016