【问题标题】:Send sms pending intent extras get overide发送短信未决意向额外获得覆盖
【发布时间】:2014-02-25 06:42:51
【问题描述】:

您好,我正在通过我的服务中的 SmsManager 从我的应用程序发送消息,并为发送和传递的短信注册广播接收器,我想在到达或未到达时更新消息状态。根据现在,我可以通过将带有行 id 的附加内容放入带有标志PendingIntent.FLAG_UPDATE_CURRENT 的待处理意图中来发送消息。但是,一旦发送消息,我就会收到仅包含最后一行附加信息的广播事件,并且我无法检索其他行的附加信息。我正在使用 PendingIntent.FLAG_UPDATE_CURRENT 这就是为什么 extras 被覆盖并且我也检查了其他标志但没有用。如何在不被覆盖的情况下获得其他行的额外内容?我在服务中发送短信的另一件事是这种方法合适吗?任何建议都会
有很大帮助。

  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 并没有太多代码

【问题讨论】:

    标签: android android-service android-broadcast


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      我猜你需要使用

      PendingIntent.FLAG_ONE_SHOT
      

      而不是

      PendingIntent.FLAG_UPDATE_CURRENT
      

      在两个地方

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

      【讨论】:

      • 让我检查一下
      • hai 我使用了 PendingIntent.FLAG_ONE_SHOT 但在检索附加内容时出现空指针异常
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多