Отправка SMS с помощью Intent не добавляет получателей на некоторых устройствах - PullRequest
4 голосов
/ 30 августа 2011

Я отправляю SMS, используя код ниже:

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("smsto:" + phoneNumber));
        intent.putExtra("address", phoneNumber);
        intent.putExtra("sms_body", messageBody);
        intent.setType("vnd.android-dir/mms-sms");
        context.startActivity(intent);

Я добавил в Intent оба Uri с smsto: и адрес String extra.Это работает на большинстве устройств, но на некоторых - нет.Одним из устройств является SE XPERIA Mini.Что еще можно добавить при отправке SMS, чтобы убедиться, что получатель установлен в приложении SMS?

1 Ответ

21 голосов
/ 30 августа 2011

Я посмотрел источник Intent, и похоже, что установка типа намерения удаляет данные, а установка данных - тип. Вот что я нашел:

public Intent setData(Uri data) {
        mData = data;
        mType = null;
        return this;
    }

public Intent setType(String type) {
        mData = null;
        mType = type;
        return this;
    }

public Intent setDataAndType(Uri data, String type) {
        mData = data;
        mType = type;
        return this;
    }

Таким образом, тип настройки переопределяет мои данные, предоставленные в Uri.parse ("smsto:" + phoneNumber). Я также пытался использовать setDataAndType, но тогда Android просто не может найти подходящее намерение для запуска такой комбинации ... Так что это окончательное решение:

Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.putExtra("address", phoneNumber);
        intent.putExtra("sms_body", messageBody);
        intent.setData(Uri.parse("smsto:" + phoneNumber));
        context.startActivity(intent);

Кажется, на разных устройствах работает, на чем я могу протестировать. Я надеюсь, что это будет полезно для всех, кто сталкивается с той же проблемой.

ура!

...