“deliveryIntent”如何在Android SMS框架中工作?
问题描述:
为SMSManagers sendTextMessage功能“deliveryIntent”如何在Android SMS框架中工作?
public void sendTextMessage (String destinationAddress, String scAddress, String text,
PendingIntent sentIntent, PendingIntent deliveryIntent)
deliveryIntent Android文档如果不为null这是的PendingIntent广播时,将消息传递给收件人。状态报告的原始PDU是在扩展数据(“PDU”)
时SMS传送到目的地地址或scAddress,什么是“的地位原始PDU的含义,如果deliveryIntent被激发我无法理解报告在扩展数据(“pdu”)中,以及如何获得该报告? 。
我很感谢你的努力。
答
消息发送到destinationAddress
时广播。
PDU可能从Intent.getExtras().get("pdu")
中提取,当注册时BroadcastReceiver
收到您用PendingIntent.getBroadcast(Context, int requestCode, Intent, int flags)
定义的意图广播。例如:
private void sendSMS(String phoneNumber, String message) {
String DELIVERED = "DELIVERED";
PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0,
new Intent(DELIVERED), 0);
registerReceiver(
new BroadcastReceiver() {
@Override
public void onReceive(Context arg0, Intent arg1) {
Object pdu = arg1.getExtras().get("pdu");
... // Do something with pdu
}
},
new IntentFilter(DELIVERED));
SmsManager smsMngr = SmsManager.getDefault();
smsMngr.sendTextMessage(phoneNumber, null, message, null, deliveredPI);
}
然后你需要解析提取PDU,SMSLib应该可以做到这一点。
答
只是建立在a.ch的回答,继承人如何可以提取意图的传递报告:在
public static final SmsMessage[] getMessagesFromIntent(Intent intent) {
Object[] messages = (Object[]) intent.getSerializableExtra("pdus");
if (messages == null || messages.length == 0) {
return null;
}
byte[][] pduObjs = new byte[messages.length][];
for (int i = 0, len = messages.length; i < len; i++) {
pduObjs[i] = (byte[]) messages[i];
}
byte[][] pdus = new byte[pduObjs.length][];
SmsMessage[] msgs = new SmsMessage[pdus.length];
for (int i = 0, count = pdus.length; i < count; i++) {
pdus[i] = pduObjs[i];
msgs[i] = SmsMessage.createFromPdu(pdus[i]);
}
return msgs;
}