我使用以下代码在我的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
没有收到任何回调信息。
答案 0 :(得分:1)
我的问题是当我得到
RESULT_OK
时,如何知道游标适配器的_id
列?
您可以在SMS提供程序上放置ContentObserver
,以便在写入消息时接收回调,然后查询提供程序以获取消息ID。我在my answer here中有一个如何做到这一点的例子。您只需将"thread_id"
更改为"_id"
。
我可以稍后检查
_id
,但有没有办法从pendingIntent
获取它?
不幸的是,没有。 Intent
除了结果代码之外不会传递太多信息。它可能附加一些附加内容 - 例如,SIM卡插槽号 - 但它不会由SMS ContentProvider
分配ID。
我在发送后
deliveryIntent
没有回复任何回调。
这并不罕见。只有在收到服务中心的确认后才会触发PendingIntent
,但并非每个无线提供商都提供此功能。