Pending Intents用于在发送许多消息时发送SMS不能正常工作

时间:2014-07-28 13:43:10

标签: android android-pendingintent smsmanager

我正在开发一个应用程序,我发送短信,我需要找到它是否已发送。 如果我向某人发送消息,那么每件事情似乎都很好。

但在某些情况下,我得到了错误的信息,例如,首先我发送一条消息到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,我该如何在清单文件中添加它们?

1 个答案:

答案 0 :(得分:0)

似乎您尚未在清单中添加广播接收器。您已经匿名声明了广播接收者,因此首先需要为广播接收者声明一个名为sendPI和DeliveryPI的名称