Можно ли перечислить Intent.ACTION_SEND? Я имею в виду, что мне нужно знать, есть ли кто-то на Facebook или твиттер в Twitter от action_send.
Может быть, вам нужен более полный ответ, потому что принятый был довольно коротким, я уже слишком поздно, но, надеюсь, он по-прежнему полезен :)
Итак, это возможное решение для обработки нескольких намерений...
1) Вы хотите знать результат (например, успех или неудачу) намерения?
Просто запустите намерение, используя следующую строку:
startActivityForResult(intent, 1); //instead of startActivity(intent)
И получить requestCode и resultCode, переопределив onActivityResult:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 0) {
if(resultCode == Activity.RESULT_OK){
//intent 0 = succesful (Facebook)
} else{
//intent 0 = failed or canceled
}
} else if (requestCode == 1) {
if(resultCode == Activity.RESULT_OK){
//intent 1 = succesful (Twitter)
} else{
//intent 1 = failed or canceled
}
}
}
2) Вы хотите узнать, какое приложение открыто?
Не доверяйте встроенному замыслу, создайте свой собственный диалог и дайте каждому намерению другой requestCode
(уникальное целочисленное значение, чтобы определить намерение)
Пример:
new AlertDialog.Builder(this)
.setTitle("Share with friends!")
.setSingleChoiceItems(new ArrayAdapter<String>(this, android.R.layout.select_dialog_item,
new String[]{"Facebook", "Twitter"}), -1, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (which == 0) {
StartFacebookShare();
} else if (which == 1) {
StartTwitterShare();
}
dialog.dismiss();
}
}).show();
private void StartFacebookShare() {
String messageUrl = "http://www.stackoverflow.com"; //the url you want to share
try {
Intent intent = new Intent("android.intent.category.SEND");
intent.putExtra(Intent.EXTRA_TEXT, messageUrl);
intent.setClassName("com.facebook.katana", "com.facebook.katana.ShareLinkActivity");
startActivityForResult(intent, 0);
} catch (Exception e) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse("https://m.facebook.com/sharer.php?u=" + messageUrl));
startActivityForResult(intent, 1);
}
}
private void StartTwitterShare() {
String messageUrl= "http://www.stackoverflow.com"; //the string you want to tweet
try {
//see edit below for more info on API
Twitter twitter = TwitterFactory.getSingleton();
Status status = twitter.updateStatus(messageUrl);
} catch (Exception e) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse("https://twitter.com/intent/tweet?text=" + messageUrl));
startActivityForResult(intent, 1);
}
}
Некоторая полезная информация может быть найдена здесь и здесь, возможно, поиск здесь или комментарий, если у вас есть предложения для моего кода (мне всегда нравится обратная связь ^^), или если вы застряли на чем-то :)
Изменение: некоторые незначительные изменения, такие как намерения, и всегда добавляли улов с намерением сети (не может не работать сейчас, правда?) И для части Twitter я использовал банку (поместил ее в папку "libs") и Twitter API, который нуждается в последующей регистрации и настройке, удачи!
Нет, у вас нет способа определить, действительно ли человек делает что-либо в приложении, на которое вы ACTION_SEND
через ACTION_SEND
. Это очень похоже на Интернет, где вы не знаете, делает ли человек что-либо на веб-узле, на который вы ссылаетесь через URL-адрес.