9

SMSManagers sendTextMessage関数の Android ドキュメント

public void sendTextMessage (String destinationAddress, String scAddress, String text,         
PendingIntent sentIntent, PendingIntent deliveryIntent)

deliveryIntent NULL でない場合、この PendingIntent は、メッセージが受信者に配信されるときにブロードキャストされます。ステータス レポートの生の pdu は、拡張データ (「pdu」) にあります。

SMSがdestinationAddressまたはscAddressに配信されたときにdeliveryIntentが起動されるかどうか、および「ステータスレポートの生のpduが拡張データ(「pdu」)にあります」の意味とそのレポートを取得する方法を理解できませんでしたか?.

あなたの努力に感謝します。

4

2 に答える 2

4

メッセージが に配信されたときにブロードキャストされdestinationAddressます。

PDUは、で定義した Intent ブロードキャストを が受信したIntent.getExtras().get("pdu")ときにから抽出できます。例えば:BroadcastReceiverPendingIntent.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はそれを実行できるはずです。

于 2012-05-07T08:38:45.100 に答える
2

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;
}

http://code.google.com/p/android-smspopup/の偉大なプロジェクトの功績

于 2012-05-09T22:27:25.140 に答える