StartActivityForResults всегда возвращает RESULT_CANCEELLED для Intent.ACTION_SEND

Когда появляется всплывающее окно «Поделиться», я успешно поделился контентом в WhatsApp, но все равно возвращает RESULT_CANCEELLED. Тот же результат, когда я отправляю электронное письмо с помощью Gmail.

Вызов общего намерения, ACTION_SEND с startActivityForResult всегда возвращает CANCELLED

Intent sharingIntent = new Intent(Intent.ACTION_SEND);
    sharingIntent.setType("text/plain");
    sharingIntent.putExtra(android.content.Intent.EXTRA_TITLE, "Taxeeta, Cab Around The Curb");
    sharingIntent
        .putExtra(
            android.content.Intent.EXTRA_TEXT,
                "Hiring a cab no longer needs you to wait on call centers, or pay a"
                + " convenience (yeah right!!) charge. Taxeeta connects you"
                + " to drivers directly, for a quick book experience. With Taxeeta"
                + " you can take matters in your own hands (literally). To download"
                + " the app for your phone visit http://www.taxeeta.com");
    startActivityForResult(Intent.createChooser(sharingIntent, "Share and earn a extra Priviledge"), 111);

Код ActivityForResult

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == 111) {
        if (resultCode == RESULT_OK) {
            Toast.makeText(this, "Ok DUDE", Toast.LENGTH_LONG).show();
        } else if (resultCode == RESULT_CANCELED) {
            Toast.makeText(this, "Oversmart Eh!!", Toast.LENGTH_LONG).show();
        }
    }
}

person Siddharth    schedule 18.05.2013    source источник


Ответы (2)


startActivityForResult() работает только с действиями, которые должны вызываться таким образом. Если действие, которое вы вызываете, явно не возвращает результат, вы получите результат по умолчанию RESULT_CANCELED. Очевидно, что ACTION_SEND не предназначен для такого вызова. В документации для ACTION_SEND указано, что он не генерирует выходных данных (т. е. не генерирует результатов).

См. документацию для Activity.startActivityForResult():

Обратите внимание, что этот метод следует использовать только с протоколами Intent, которые определены для возврата результата. В других протоколах (таких как ACTION_MAIN или ACTION_VIEW) вы можете не получить ожидаемый результат. Например, если активность, которую вы запускаете, использует режим запуска singleTask, она не будет выполняться в вашей задаче, и поэтому вы сразу же получите результат отмены.

person David Wasser    schedule 07.06.2013
comment
Есть ли обходной путь? Если я хочу как-то поделиться изображением и иметь возможность сказать, было ли оно успешным или нет, как я могу это сделать? - person JHowzer; 10.01.2019
comment
@JHowzer, о котором я не знаю. Как бы вы определили успех в любом случае? Это потребует взаимодействия между вашим приложением и приложением для обмена, и для этого не существует стандарта. - person David Wasser; 10.01.2019

У меня та же проблема, и я думаю, что результатом всегда будет «Отменено», потому что даже если электронное письмо будет отправлено или нет, активность будет остановлена.

person Hichem Bili    schedule 06.06.2013
comment
Я тоже это понимаю, но я думаю, что проблема в том, что почтовое приложение (Gmail) должно предоставить результат, который затем должен быть перенаправлен в Chooser, который затем должен передать его вашему приложению. Я думаю, что Google не думал о передаче значения. - person RelativeGames; 13.10.2013