Я пытаюсь начать действие SMS с номера телефона из заполненного отсканированного QR-кода. До сих пор я смог запустить действие, но поля номера и сообщения пустые. Вот то, что у меня есть, в настоящее время это сбой приложения:
else if(resultType.getParsedResultType() == ParsedResultType.SMS){
Button smsButton = (Button)findViewById(R.id.btn_send_sms);
smsButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v){
String smsUri = ResultsActivity.this.item.getContent();
Uri uri = Uri.parse(smsUri);
Intent i = new Intent(Intent.ACTION_VIEW);
i.addCategory(Intent.CATEGORY_DEFAULT);
i.setType("vnd.android-dir/mms-sms");
i.setData(uri);
startActivity(i);
}
});
smsButton.setVisibility(View.VISIBLE);
}
Строка smsUri
содержит отсканированную строку из QR-кода "SMSTO: 666-666-1234: привет". Как я могу получить запуск SMS-активности с номером телефона и сообщением, уже введенным в поля номера и тела?
Я видел этот пост:
Отправка SMS с помощью Intent не добавляет получателей на некоторых устройствах
Нужно ли мне самому анализировать результат QR-кода и разбивать его на номер телефона и сообщение, а затем добавлять их в качестве дополнений, как в этом примере?
Понял!
Поскольку я пока не могу ответить на свой вопрос, вот оно:
Хорошо, получил это на работу. Я создал класс, чтобы разбить результат QR на отдельные элементы:
public class Sms {
public static String[] breakString(String s) {
String[] smsElements = s.split(":");
return smsElements;
}
}
Затем изменил метод, описанный выше, на:
else if(resultType.getParsedResultType() == ParsedResultType.SMS){
Button smsButton = (Button)findViewById(R.id.btn_send_sms);
smsButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v){
String smsUri = ResultsActivity.this.item.getContent();
String[] smsElements = Sms.breakString(smsUri);
Intent i = new Intent(Intent.ACTION_VIEW);
i.putExtra("address", smsElements[1]);
i.putExtra("sms_body", smsElements[2]);
i.setData(Uri.parse("smsto:" + smsElements[1]));
startActivity(i);
}
});
smsButton.setVisibility(View.VISIBLE);
}