2011-01-23 3 views
8

Я пытался получить код результата из sendMultipartTextMessage, вещь, которую я не понимаю, - это если широковещательный приемник работает с sendTextMessage, почему он не работает с sendMultipartTextMessage? Я искал по-разному и смотрел и приводил примеры кода, но просто не видел никаких очевидных причин, почему это не работает. Может ли кто-нибудь пролить свет на это?Широковещательный приемник с sendMultiPartTextMessage

ArrayList<String> messages = sms.divideMessage(text); 
int messageCount = messages.size(); 
ArrayList<PendingIntent> deliveryIntents = new ArrayList<PendingIntent>(messageCount); 
ArrayList<PendingIntent> sentIntents = new ArrayList<PendingIntent>(messageCount); 

for (int j = 0; j < messageCount; j++) { 
    sentIntents.add(
      PendingIntent.getBroadcast(context, 0, new Intent(SENT_ACTION), 
      0)); 
} 
sms.sendMultipartTextMessage(phoneNumber, null, messages, sentIntents, null); 

Вот мой BroadcastReceiver:

private BroadcastReceiver messageSentReceiver = new BroadcastReceiver() {  
    @Override 
    public void onReceive(Context context, Intent intent) { 
     switch (getResultCode()) { 
      case Activity.RESULT_OK: 
       Toast.makeText(context, "SMS sent", Toast.LENGTH_SHORT).show(); 
       break; 
      case SmsManager.RESULT_ERROR_GENERIC_FAILURE: 
       Toast.makeText(context, "Generic failure", Toast.LENGTH_SHORT).show(); 
       break; 
      case SmsManager.RESULT_ERROR_NO_SERVICE: 
       Toast.makeText(context, "No service", Toast.LENGTH_SHORT).show(); 
       break; 
      case SmsManager.RESULT_ERROR_NULL_PDU: 
       Toast.makeText(context, "Null PDU", Toast.LENGTH_SHORT).show(); 
       break; 
      case SmsManager.RESULT_ERROR_RADIO_OFF: 
       Toast.makeText(context, "Radio off", Toast.LENGTH_SHORT).show(); 
       break; 
      } 
     } 
}; 

код выполняется, как показано ниже:

sentIntents = new ArrayList<PendingIntent>(); 
sentIntent = PendingIntent.getBroadcast(context, 0, new Intent(SENT_ACTION), 0); 
deliveredIntent = PendingIntent.getBroadcast(context, 0, new Intent(DELIVERED_ACTION), 0); 

context.registerReceiver(messageSentReceiver, new IntentFilter(SENT_ACTION)); 
context.registerReceiver(messageDeliveredReceiver, new IntentFilter(DELIVERED_ACTION)); 

Если кто-то может пролить свет на это, я бы очень признателен. Я просто не понимаю, почему это может с sendTextMessage, но не на sendMultipartTextMessage.

Спасибо.

ответ

0

Попробуйте установить IntentFilter в (SENT) вместо (SENT_ACTION). Он отлично работает для меня.

5

Привет, вам не хватает упоминания имени приемника brodcast в ваших намерениях.

Пожалуйста, попробуйте ниже код он работает хорошо для меня ..

ArrayList<PendingIntent> sentPendingIntents = new ArrayList<PendingIntent>(); 
    ArrayList<PendingIntent> deliveredPendingIntents = new ArrayList<PendingIntent>(); 
    PendingIntent sentPI = PendingIntent.getBroadcast(mContext, 0, 
      new Intent(mContext, SmsSentReceiver.class), 0); 

    PendingIntent deliveredPI = PendingIntent.getBroadcast(mContext, 0, 
      new Intent(mContext, SmsDeliveredReceiver.class), 0); 
    try { 
     SmsManager sms = SmsManager.getDefault(); 
     ArrayList<String> mSMSMessage = sms.divideMessage(message); 
     for (int i = 0; i < mSMSMessage.size(); i++) { 
      sentPendingIntents.add(i, sentPI); 

      deliveredPendingIntents.add(i, deliveredPI); 
     } 
     sms.sendMultipartTextMessage(phoneNumber, null, mSMSMessage, 
       sentPendingIntents, deliveredPendingIntents); 

    } catch (Exception e) { 

     e.printStackTrace(); 
     Toast.makeText(mContext, "SMS sending failed...", 
       Toast.LENGTH_SHORT).show(); 
    } 

Создать boardcast приемник для отправленных смс, как показано ниже.

public class SmsSentReceiver extends BroadcastReceiver { 
@Override 
public void onReceive(Context context, Intent intent) { 
    switch (getResultCode()) { 
    case Activity.RESULT_OK: 
     Toast.makeText(context, 
       "SMS Sent" + intent.getIntExtra("object", 0), 
       Toast.LENGTH_SHORT).show(); 

     break; 
    case SmsManager.RESULT_ERROR_GENERIC_FAILURE: 
     Toast.makeText(context, "SMS generic failure", Toast.LENGTH_SHORT) 
       .show(); 

     break; 
    case SmsManager.RESULT_ERROR_NO_SERVICE: 
     Toast.makeText(context, "SMS no service", Toast.LENGTH_SHORT) 
       .show(); 

     break; 
    case SmsManager.RESULT_ERROR_NULL_PDU: 
     Toast.makeText(context, "SMS null PDU", Toast.LENGTH_SHORT).show(); 
     break; 
    case SmsManager.RESULT_ERROR_RADIO_OFF: 
     Toast.makeText(context, "SMS radio off", Toast.LENGTH_SHORT).show(); 
     break; 
    } 
} 

Создать другой приемник вещания для смс, как показано ниже.

public class SmsDeliveredReceiver extends BroadcastReceiver { 
@Override 
public void onReceive(Context context, Intent arg1) { 
    switch (getResultCode()) { 
    case Activity.RESULT_OK: 
     Toast.makeText(context, "SMS delivered", Toast.LENGTH_SHORT).show(); 
     break; 
    case Activity.RESULT_CANCELED: 
     Toast.makeText(context, "SMS not delivered", Toast.LENGTH_SHORT).show(); 
     break; 
    } 
} 

}

И, наконец, объявить приемник в манифесте.

<receiver android:name=".receiver.SmsSentReceiver" > 
    </receiver> 
    <receiver android:name=".receiver.SmsDeliveredReceiver" > 
    </receiver> 
+0

Необходимо создать два разных класса. ?? –