Дождитесь окончания процесса, чтобы начать другой процесс
Когда пользователь нажимает на мою кнопку, он выполняет две функции: отправка SMS и отправка электронного письма.
Когда я нажимаю на эту кнопку, отправляется SMS, и внезапно всплывающее окно выбора клиента. Я хочу, чтобы окно выбора почтового клиента отображалось только после завершения функции отправки SMS.
Как я должен изменить свой код?
Button hi= (Button) findViewById(R.id.button1);
hi.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
sendsms();
sendemail();
}
private void sendemail() {
Intent email = new Intent(Intent.ACTION_SEND);
email.putExtra(Intent.EXTRA_EMAIL, new String[]{ to1});
email.putExtra(Intent.EXTRA_CC, new String[]{ to2});
email.putExtra(Intent.EXTRA_BCC, new String[]{to3});
email.putExtra(Intent.EXTRA_BCC, new String[]{to4});
email.putExtra(Intent.EXTRA_BCC, new String[]{to5});
email.putExtra(Intent.EXTRA_SUBJECT, subject);
email.putExtra(Intent.EXTRA_TEXT, emailmessage);
//need this to prompts email client only
email.setType("message/rfc822");
startActivity(Intent.createChooser(email, "Choose an Email client :"));
}
sendsms()
{
String receipentsNumber[] = {"111","222","333","444","555"};
for (int i = 0; i < receipentsNumber.length; i++) {
try {
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(receipentsNumber[i], null, message, null,
null);
System.ot.println(getApplicationContext(), "SMS Sent to" + " " + receipentsNumber[i], Toast.LENGTH_LONG).show();
} catch (Exception e) {
Toast.makeText(getApplicationContext(),
"SMS faild, please try again later!", Toast.LENGTH_LONG)
.show();
e.printStackTrace();
}
}
}
});
1 ответ
Согласно вашему коду, вам нужно дождаться статуса SMS или мы можем сказать "Успешно" или "Неудачный звонок". Вы можете использовать Broadcast Receiver, который будет обрабатывать события и возвращать некоторые отзывы.
И вы можете позвонить по электронной почте после успеха SMS.
Проверьте справочный пример, который идеально подходит для вас.
Если вам нужно отслеживать состояние процесса отправки SMS-сообщения, вы можете использовать два объекта Pending Intent вместе с двумя BroadcastReceiver
объекты, как это: один для отправленных SMS и второй для этого статуса доставки.
//---sends an SMS message to another device---
private void sendSMS(String phoneNumber, String message) {
String SENT = "SMS_SENT";
String DELIVERED = "SMS_DELIVERED";
PendingIntent sentPI = PendingIntent.getBroadcast(this, 0,
new Intent(SENT), 0);
PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0,
new Intent(DELIVERED), 0);
//---when the SMS has been sent---
registerReceiver(new BroadcastReceiver() {@Override
public void onReceive(Context arg0, Intent arg1) {
switch (getResultCode()) {
case Activity.RESULT_OK:
Toast.makeText(getBaseContext(), "SMS sent",
Toast.LENGTH_SHORT).show();
break;
case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
Toast.makeText(getBaseContext(), "Generic failure",
Toast.LENGTH_SHORT).show();
break;
case SmsManager.RESULT_ERROR_NO_SERVICE:
Toast.makeText(getBaseContext(), "No service",
Toast.LENGTH_SHORT).show();
break;
case SmsManager.RESULT_ERROR_NULL_PDU:
Toast.makeText(getBaseContext(), "Null PDU",
Toast.LENGTH_SHORT).show();
break;
case SmsManager.RESULT_ERROR_RADIO_OFF:
Toast.makeText(getBaseContext(), "Radio off",
Toast.LENGTH_SHORT).show();
break;
}
}
}, new IntentFilter(SENT));
//---when the SMS has been delivered---
registerReceiver(new BroadcastReceiver() {@Override
public void onReceive(Context arg0, Intent arg1) {
switch (getResultCode()) {
case Activity.RESULT_OK:
Toast.makeText(getBaseContext(), "SMS delivered",
Toast.LENGTH_SHORT).show();
break;
case Activity.RESULT_CANCELED:
Toast.makeText(getBaseContext(), "SMS not delivered",
Toast.LENGTH_SHORT).show();
break;
}
}
}, new IntentFilter(DELIVERED));
SmsManager sms = SmsManager.getDefault();
sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI);
}