我正在开发一个应用程序,我发送短信,我需要找到它是否已发送。 如果我向某人发送消息,那么每件事情似乎都很好。
但在某些情况下,我得到了错误的信息,例如,首先我发送一条消息到0000号码(但它不会发送),之后我发送消息到号码0001并且它发送(消息到0000仍然没有但是我得到了一个祝酒词:短信发送到0000(但只发送到0001的消息),我该如何解决发送报告中的这个冲突?
这是我的代码:
try {
SmsManager smsManager = SmsManager.getDefault();
String to = "5556";
String body = "Test Message";
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).putExtra("senderNumber", to), 0);
registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context arg0, Intent arg1) {
switch (getResultCode()) {
case Activity.RESULT_OK:
Toast.makeText(arg0, "SMS sent", Toast.LENGTH_LONG).show();
break;
default:
Toast.makeText(arg0, "Error", Toast.LENGTH_LONG).show();
break;
}
}
}, new IntentFilter(SENT));
registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context arg0, Intent arg1) {
switch (getResultCode()) {
case Activity.RESULT_OK:
String s = arg1.getStringExtra("senderNumber");
Toast.makeText(getBaseContext(), "SMS delivered to " + s, Toast.LENGTH_LONG).show();
break;
default:
Toast.makeText(getBaseContext(), "SMS not delivered", Toast.LENGTH_LONG).show();
break;
}
}
}, new IntentFilter(DELIVERED));
smsManager.sendTextMessage(to.getText().toString(), null, body.getText().toString(), sentPI, deliveredPI);
}
catch (Exception ex) {
Toast.makeText(this, ex.getMessage(), Toast.LENGTH_LONG).show();
}
更新
我发现如果我为Intent动作添加一个唯一的id(DELIVERED + id)它会很好,没有冲突。 但是我没有在创建消息时注册接收者,我使用清单文件来执行此操作:
<receiver android:name=".SendBroadcastReceiver" >
<intent-filter>
<action android:name="com.example.myapp.SMS_SENT" />
<action android:name="com.example.myapp.SMS_DELIVERED" />
</intent-filter>
</receiver>
还有一个名为SendBroadcastReceiver的Receiver类来处理短信传递。
如果我为操作添加唯一ID,我该如何在清单文件中添加它们?
答案 0 :(得分:0)
似乎您尚未在清单中添加广播接收器。您已经匿名声明了广播接收者,因此首先需要为广播接收者声明一个名为sendPI和DeliveryPI的名称