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

sendSMS()의'for 루프 '다음에'sendMail()'을 호출하십시오. –

답변

6

코드에 따라 SMS 상태가 나올 때까지 기다려야합니다. 그렇지 않으면 성공 또는 실패한 전화를 다시 말할 수 있습니다. Broadcast Receiver을 사용하면 EVENT를 처리하고 피드백을 반환 할 수 있습니다.

그리고 SMS 성공 후 이메일 기능을 호출 할 수 있습니다.

Check Reference Example 이것은 당신에게 적합합니다. 그 배달 상태를 보낸 SMS & 초 하나 : 당신이 SMS 메시지 전송 프로세스의 상태를 모니터링해야하는 경우

, 실제로이 같은 두 개의 BroadcastReceiver 개체를 두 Pending Intent 개체를 사용할 수 있습니다.

//---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

좋습니다. 제가 확인하겠습니다. 고맙습니다.!! –

관련 문제