Android - обмен - PullRequest
       17

Android - обмен

1 голос
/ 14 марта 2012

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

Ответы [ 2 ]

2 голосов
/ 26 апреля 2013

Возможно, вы хотели получить более полный ответ, потому что принятый ответ был довольно коротким, я опоздал на год, но, надеюсь, он все еще полезен:)

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

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 я использовал jar (поместите его в папку «libs») и API Twitter, которыйнеобходима следующая регистрация и конфигурация , удачи!

2 голосов
/ 14 марта 2012

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

...