我正在使用以下代码在我的Android应用程序中发送短信:
PendingIntent pending = PendingIntent.getBroadcast(activity, 0, new Intent(PENDING), 0);
activity.registerReceiver(new BroadcastReceiver() {
public void onReceive(Context arg0, Intent intent) {
switch (getResultCode()) {
case Activity.RESULT_OK: {
sendJsonData(false);
break;
}
case SmsManager.RESULT_ERROR_GENERIC_FAILURE: {
sendJsonData(true);
break;
}
case SmsManager.RESULT_ERROR_NO_SERVICE: {
sendJsonData(true);
break;
}
case SmsManager.RESULT_ERROR_NULL_PDU: {
sendJsonData(true);
break;
}
case SmsManager.RESULT_ERROR_RADIO_OFF: {
sendJsonData(true);
break;
}
}
}
private void sendJsonData(boolean error) {
}
}, new IntentFilter(PENDING));
PendingIntent deliveryIntent = PendingIntent.getBroadcast(activity, 0, new Intent(DELIVERED), 0);
activity.registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context arg0, Intent arg1) {
switch (getResultCode()) {
case Activity.RESULT_OK:
Log.i(TAG, "got here");
break;
case Activity.RESULT_CANCELED:
Log.i(TAG, "got here");
break;
}
}
}, new IntentFilter(DELIVERED));
我的问题是当我得到RESULT_OK
时,我怎么知道游标适配器的_id
列呢?我以后需要这个ID。我可以以后检查_id
,但是有没有办法从pendingIntent
得到它呢?
我在deliveryIntent
交付后没有收到任何回调。
1条答案
按热度按时间i7uq4tfw1#
我的问题是,当我得到
RESULT_OK
时,我如何知道游标适配器的_id
列?您可以将
ContentObserver
放在SMS提供程序上,以便在编写消息时接收回调,然后查询提供程序以获取消息ID。我有一个在my answer here中如何执行此操作的示例。您只需要将"thread_id"
更改为"_id"
。我可以稍后检查
_id
,但是否有办法从pendingIntent
获取它?Intent
附带的唯一额外的文档是一个可选的附加错误代码,用于一般故障。但是,如果您要检查任何实际运行的示例的额外代码,您可能会发现一些没有文档记录的代码,其中之一可能是消息的内容URI,可能使用"uri"
作为键。不过,这可能并不是在所有地方都一致。这样我就不会依赖它了。我在
deliveryIntent
交付后没有收到任何回调。这种情况并不罕见,只有在收到服务中心的确认后才会触发delivery
PendingIntent
,但并不是每个无线运营商都提供这种功能。