目标:(注意:选择的答案为 CDMA(3gpp2)生成一个 GSM(3gpp)PDU )请参考这里
创建一个可以传递到的 PDU SmsMessage.createFromPdu(byte[] pdu)
。我正在向我的BroadcastReciever
一个收听 SMS 消息的人“广播意图”。
一BroadcastReciever
用于“真正android.provider.Telephony.SMS_RECEIVED
的”短信
intent-filter
对这些新的“应用程序短信”使用自定义操作。
@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
if (bundle != null) {
Object[] pdusObj = (Object[]) bundle.get("pdus");
SmsMessage[] messages = new SmsMessage[pdusObj.length];
// getting SMS information from Pdu.
for (int i = 0; i < pdusObj.length; i++) {
messages[i] = SmsMessage.createFromPdu((byte[]) pdusObj[i]);
}
for (SmsMessage currentMessage : messages) {
//the currentMessage.getDisplayOriginatingAddress()
//or .getDisplayMessageBody() is null if I Broadcast a fake sms
Log.i("BB", "address:"+currentMessage.getDisplayOriginatingAddress()+" message:"+currentMessage.getDisplayMessageBody());
...
所以我希望我BroadcastReciever
能够在不添加额外代码的情况下处理这两种类型的消息
(是的,我知道我可以BroadcastReciever
为不同的intent-filter
动作采取不同的方式,但我想真正做到这一点,因为我知道这是可以做到的,我很固执)
研究:
我整天/晚上都在做研究。即使我对数学和转换以及创建合适的算法非常糟糕,我也尝试过编写自己的代码。我查看了有关 PDUs和Create PDU Android的Stack 主题,但答案中的链接已损坏。我什至看了源代码com.google.android.mms.pdu
到目前为止,我只能使用http://www.wrankl.de/JavaPC/SMSTools.html中的一些代码创建一个没有“原始地址”的 PDU
配电单元:
目的地:555 消息:helloworld
"1100038155f50000aa0ae8329bfdbebfe56c32"
这显然是无效的......
旁注:
除了本地使用之外,我不打算对 PDU 做任何事情,我不想在我的代码中使用硬编码的 PDU,因为我没有重复使用 PDU。
如果有什么我可以添加到我用来添加“原始地址”的代码中,那将起作用。或者有人知道我不知道的图书馆的信息吗?
谢谢
更新:
试过了
byte[] by =(byte[])(SmsMessage.getSubmitPdu("12345", "1234", "hello", false).encodedMessage);
这给了我以下(以十六进制表示)
"0000100200000000000000000000000004010203040000000e000320ec400107102e8cbb366f00"
没用