2014-01-11 2 views
2

Когда пользователь нажимает на мою кнопку, он выполняет две функции: отправка 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(); 
      } 

     } 
    } 

}); 
+0

Вызов 'sendMail()' после 'for loop'' sendSMS() ' –

ответ

6

В соответствии с вашим кодом вам нужно дождаться статуса SMS, или мы можем сказать «Успех» или «Неверный звонок». Вы можете использовать Broadcast Receiver, который будет обрабатывать EVENT и возвращать некоторую обратную связь.

И вы можете позвонить по электронной почте после успешного использования SMS.

Check Reference Example который идеально подходит для вас.

Если вам необходимо следить за состоянием процесса SMS сообщения отправки, вы можете использовать два Pending Intent объекта вместе с двумя BroadcastReceiver объектами, например: One для Переданного 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); 
    } 
+0

Ok. Я это проверю. Спасибо.!! –

Смежные вопросы