0
我有下面的代碼,我想知道哪些短信已經發送或沒有。 我的代碼每30秒發送一次1-5 sms,所以當吐司「sms not delivered」出現時,我不知道哪一個沒有發送。我不知道這是否是這樣做的正確的方式,但它是對這個問題如何找出哪些短信尚未發送或發送?
public boolean sendSMS(String id, String num, String msg) {
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);
registerReceiver(sendBroadcastReceiver, new IntentFilter(SENT));
registerReceiver(deliveryBroadcastReciever, new
IntentFilter(DELIVERED));
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage("xxxxxxxx", null, msg, sentPI, deliveredPI);
Log.e("Message Sent", num + " " + msg + " " + id);
return true;
}
class DeliverReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, 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;
}
}
}
class SentReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, 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;
}
}
我爲我的英語不好對不起最常見的解決方案。
編輯:
public boolean sendSMS(String id, String num, String msg) {
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);
registerReceiver(sendBroadcastReceiver, new IntentFilter(SENT));
registerReceiver(deliveryBroadcastReciever, new IntentFilter(DELIVERED));
smsManager.sendTextMessage("+xxxxxxxxxx", null, msg, sentPI, deliveredPI);
Log.e("Message Sent", num + " " + msg + " " + id);
return true;
}
public class DeliverReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
final Bundle bundle = intent.getExtras();
try {
if (bundle != null){
final Object[] bObject = (Object[]) bundle.get("pdus");
for (int i = 0; i < bObject.length; i++){
SmsMessage current = SmsMessage.createFromPdu((byte[]) bObject[i]);
String phoneNum = current.getDisplayOriginatingAddress();
}
}
}catch (Exception e){
Log.e("Deliver Reciever",e.toString());
}
}
}
還有一個問題。當我嘗試獲取PDU時,它會拋出NullPointerException,因爲Object爲null。這是爲什麼發生? PS。感謝您的幫助 –
您可以將您的原始代碼附加到您所做的修改中嗎? –
也可以在該行上放置一個斷點,併發布該捆綁對象在該點上的位置? –