Android - обмен

1

Можно ли перечислить Intent.ACTION_SEND? Я имею в виду, что мне нужно знать, есть ли кто-то на Facebook или твиттер в Twitter от action_send.

  • 0
    что именно вы хотите реализовать?
  • 0
    У меня есть кнопка «Поделиться», которая использовалась для публикации на стене пользователя в фейсбуке, и у меня есть DialogListener, чтобы узнать, действительно ли пользователь поделился этим или просто нажать кнопку и выйти. Я хочу иметь возможность поделиться также в Twitter или просто смс, но мне нужно знать, действительно ли пользователь делится, чтобы увеличить свои очки.
Теги:
share
facebook
twitter

2 ответа

2
Лучший ответ

Может быть, вам нужен более полный ответ, потому что принятый был довольно коротким, я уже слишком поздно, но, надеюсь, он по-прежнему полезен :)

Итак, это возможное решение для обработки нескольких намерений...

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, который нуждается в последующей регистрации и настройке, удачи!

  • 1
    Хороший кусок кода. Не нужно это прямо сейчас, но я уверен, что это понадобится в будущем! Спасибо
  • 0
    Никогда не кодируйте имена классов и пакетов сторонних приложений, которые не являются частью какого-либо документированного и поддерживаемого API.
Показать ещё 1 комментарий
2

Нет, у вас нет способа определить, действительно ли человек делает что-либо в приложении, на которое вы ACTION_SEND через ACTION_SEND. Это очень похоже на Интернет, где вы не знаете, делает ли человек что-либо на веб-узле, на который вы ссылаетесь через URL-адрес.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню