发送sms pendingintent extras获取覆盖

时间:2014-02-25 06:42:52

标签: android android-service android-broadcast

您好我在我的服务中通过SmsManager从我的应用程序发送消息,并注册广播接收器以发送和传送短信,我想更新消息状态,无论是否到达。到目前为止,我可以通过在Pending Intent中使用标记PendingIntent.FLAG_UPDATE_CURRENT添加行ID的附加内容来发送消息。但是一旦发送消息,我只接收带有最后一行额外内容的广播事件,而且我无法检索其他行的额外内容。我正在使用PendingIntent.FLAG_UPDATE_CURRENT,这就是为什么额外的东西被覆盖,我也检查了其他标志,但没有用。如何在不被覆盖的情况下获得额外的其他行?我在服务中发送短信的另一件事是这种方法适当吗?任何建议都将是 很有帮助。

  String mSelectionClause = MyContentprovider.STATUS+ " = ?";
                 String[] mSelectionArgs = {"fail"};


                    Uri students = MyContentprovider.CONTENT_URI_SENDMSG;
                    Cursor c = getContentResolver().query(students, null, mSelectionClause, mSelectionArgs, "userphno");
                    if (c.moveToFirst()) {
                       do{



                               String SENT = "SMS_SENT";
                                String DELIVERED = "SMS_DELIVERED";

                                Intent SENTINTENT=new Intent(SENT);
                                SENTINTENT.putExtra("id",c.getString(c.getColumnIndex( MyContentprovider._ID)));
                                SENTINTENT.putExtra("userno", c.getString(c.getColumnIndex( MyContentprovider.USER_PHNO)));
                            if(c.isLast()){

                                SENTINTENT.putExtra("lastrow", "true");

                            }


                                Intent DELIVEREDINTENT=new Intent(DELIVERED);
                                DELIVEREDINTENT.putExtra("id",c.getString(c.getColumnIndex( MyContentprovider._ID)));
                                DELIVEREDINTENT.putExtra("userno", c.getString(c.getColumnIndex( MyContentprovider.USER_PHNO)));

                                  PendingIntent sentPI = PendingIntent.getBroadcast(this, 0,
                                          SENTINTENT, PendingIntent.FLAG_UPDATE_CURRENT);


                                  PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0,
                                          DELIVEREDINTENT, PendingIntent.FLAG_UPDATE_CURRENT);

                                  String msg= c.getString(c.getColumnIndex( MyContentprovider.MESSAGE));

                       SmsManager sms = SmsManager.getDefault();
                                                      sms.sendTextMessage( c.getString(c.getColumnIndex( MyContentprovider.USER_PHNO)), null, msg, sentPI, deliveredPI);

并且在广播接收器和我存储行的ID没有那么多代码

2 个答案:

答案 0 :(得分:5)

我找到的解决方案是为int(第二个参数)传递一个唯一的requestCode

PendingIntent.getBroadcast(this, 0, SENTINTENT, PendingIntent.FLAG_UPDATE_CURRENT)

然后为每个人创建一个新的PendingIntent

答案 1 :(得分:1)

我想你需要使用

PendingIntent.FLAG_ONE_SHOT

而不是

PendingIntent.FLAG_UPDATE_CURRENT

在两个地方

PendingIntent.FLAG_UPDATE_CURRENT将使用新的额外数据替换现有的待处理意图