您好我在我的服务中通过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没有那么多代码
答案 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
将使用新的额外数据替换现有的待处理意图