2013-08-14 2 views
5

내가 여러 연락처에 여러 메시지를 보내보고하고 각 연락처 사용을 위해 내가 찾아 각 메시지에 대한 보고서를 제공 할안드로이드 SmsManger 배달

private void sendSMS(String first, String last, String id, String phoneNumber) 
{   
    try { 
     String message; 
     message = insertName(first, last); 

     if (message.equals(null) || message.equals("")) message = "\n"; 


     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() 
     { 
      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); 

코드 다음, 숫자 또는 브로드 캐스트 메시지의 일을 얻을 수있는 방법 이 연락처에 대한 배달 보고서를 이해하고 있습니까?

답변

6

보낸 메시지를 식별하는 데 사용할 여분의 문자로 전달 된 의도를 작성하십시오.

Intent deliveredIntent = new Intent(DELIVERED + id); 
deliveredIntent.putExtra("id", id); // Add some unique id as an extra 
PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0, 
     deliveredIntent, 0); 

registerReceiver(new BroadcastReceiver() 
     { 
      @Override 
      public void onReceive(Context arg0, Intent arg1) 
      { 
       lonng messageID = arg1.getLongExtra("id", -1L); 
       if(id!=-1) 
       { 
         // you got your sms delivered with the id 
       } 

      } 
     }, new IntentFilter(DELIVERED+id));  
+0

예. 서로의 의도를 식별 할 수있는 한 설정할 수 있습니다. – Tarun

+0

'id'는 매개 변수 내에서 String으로 정의되었습니다. 즉 'putExtra()'는 'deliveredIntent'에 문자열을 추가합니다. 그렇다면 왜 'onReceive'에서 'getStringExtra()'대신 'getLongExtra()'를 사용합니까? – 1111161171159459134

+0

@Tarun MMS에 대한 아이디어가 있습니까? – Gattsu