目標: (注: 選択した回答により、GSM (3gpp) PDU が生成されます) CDMA (3gpp2) については、こちらを参照してください。
に渡すことができる PDU を作成しますSmsMessage.createFromPdu(byte[] pdu)
。BroadcastReciever
SMS メッセージをリッスンしている 1 つに「インテントをブロードキャスト」しています。
1BroadcastReciever
「実際の」 SMSに使用android.provider.Telephony.SMS_RECEIVED
する
これらの新しい「アプリケーション SMS」のカスタム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 を作成することしかできませんでした。
PDU:
宛先: 555 メッセージ: helloworld
"1100038155f50000aa0ae8329bfdbebfe56c32"
これは明らかに有効ではありません...
補足:
ローカルでの使用以外に PDU を使用する予定はありません。PDU を再利用しないため、コードにハード コーディングされた PDU は必要ありません。
「発信元アドレス」を追加するために使用しているコードに追加できるものがあれば、それは機能します。または、私が知らない図書館に関する情報を誰かが持っていますか?
ありがとう
アップデート:
試した
byte[] by =(byte[])(SmsMessage.getSubmitPdu("12345", "1234", "hello", false).encodedMessage);
これにより、次のようになります(16進数表現)
"0000100200000000000000000000000004010203040000000e000320ec400107102e8cbb366f00"
うまくいきませんでした