如何找出哪些短信未送达或发送?
How to find out which sms has not been delivered or sent?
我有以下代码,我想知道哪些短信已发送或未发送。
我的代码每 30 秒发送 1-5 条短信,所以当 toast "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());
}
}
}
首先,将您的 SmSManager 设为静态 class 对象。然后,您可以从隐藏在意图对象中的 PDU 中获取当前 phone number/phone 数字。
final SmsManager sms = SmsManager.getDefault();
public void onReceive(Context context, Intent intent) {
final Bundle bundle = intent.getExtras();
String phone = "";
SmsMessage smsMessage;
try {
if (bundle != null) {
final Object[] pdu = (Object[]) bundle.get("pdu");
for (int i = 0; i < pdu.length; i++) {
smsMessage = SmsMessage.createFromPdu((byte[]) pdu[i]);
phone = current.getDisplayOriginatingAddress();
}
}
}
}
我有以下代码,我想知道哪些短信已发送或未发送。 我的代码每 30 秒发送 1-5 条短信,所以当 toast "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());
}
}
}
首先,将您的 SmSManager 设为静态 class 对象。然后,您可以从隐藏在意图对象中的 PDU 中获取当前 phone number/phone 数字。
final SmsManager sms = SmsManager.getDefault();
public void onReceive(Context context, Intent intent) {
final Bundle bundle = intent.getExtras();
String phone = "";
SmsMessage smsMessage;
try {
if (bundle != null) {
final Object[] pdu = (Object[]) bundle.get("pdu");
for (int i = 0; i < pdu.length; i++) {
smsMessage = SmsMessage.createFromPdu((byte[]) pdu[i]);
phone = current.getDisplayOriginatingAddress();
}
}
}
}