2011-01-23 18 views
8

He intentado obtener el código de resultado de estado de sendMultipartTextMessage, lo que no entiendo es si el receptor de difusión funciona con sendTextMessage, ¿por qué no funciona con sendMultipartTextMessage? He buscado por todas partes y he buscado y codificado ejemplos, pero simplemente no puedo ver ninguna razón obvia de por qué esto no funcionará. ¿Alguien puede aclarar esto?Receptor de difusión con 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); 

Aquí es mi 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; 
      } 
     } 
}; 

El código se realiza de la siguiente manera:

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

Si alguien puede arrojar alguna luz sobre esto, yo lo agradecería muchísimo. Simplemente no puedo ver por qué esto podría funcionar con sendTextMessage, pero no en sendMultipartTextMessage.

Gracias.

Respuesta

0

Intenta configurar IntentFilter como (SENT) en lugar de (SENT_ACTION). Está funcionando bien para mí.

5

Hola, me falta mencionar el nombre del receptor de brodcast en su intento.

Por favor, intente más adelante código que está funcionando bien para mí ..

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

Crear un receptor boardcast por SMS enviado, como a continuación.

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; 
    } 
} 

Cree otro receptor de difusión para entrega de SMS como se indica a continuación.

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; 
    } 
} 

}

Y finalmente declarar receptor en el manifiesto.

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

es necesario crear dos clases diferentes. ?? –

Cuestiones relacionadas