2

私が推測するほとんどの人に続いて、私はhttp://mobiforge.com/developing/story/sms-messaging-androidからSMS処理コードを取得しています。このコード(送信済みメッセージ用)を使用して、送信済みおよび配信済みメッセージのブロードキャストをキャッチしようとしています。

        appContext.registerReceiver(new BroadcastReceiver() {
            @Override
            public void onReceive(Context arg0, Intent arg1) {
                Log.i("Debug",
                        "My embedded receiver: "
                                + String.valueOf(getResultCode()));
            }
        }, new IntentFilter("iam.applications.SmsReceiver.SMS_SENT"));

これにより、SMSが正常に送信された場合でも、getResultCode()は常に-1の値を返します。SMSが送信されたかどうかを確認する別の方法がわかりません。

また、BroadcastReceiverをサブクラス化して、違いが生じるかどうかを確認しましたが、違いはありません。-1は常に返されます:

@Override
public void onReceive(Context context, Intent intent) {
    String action = intent.getAction();

    Log.i("Debug",
            "Result code in onReceive: " + String.valueOf(getResultCode()));
}

私がPendingIntentを作成したのは、次のようになります(長いSMSメッセージの一部を処理するためのforループからの抜粋)。

        Intent sentIntent = new Intent(
                "iam.applications.SmsReceiver.SMS_SENT");
        sentIntent.putExtra(SmsHandler.PHONE_NUMBER, phoneNumber);
        sentIntent.putExtra(SmsHandler.MESSAGE, message);
        sentPIArray.add(PendingIntent.getBroadcast(appContext,
                (int) Calendar.getInstance().getTimeInMillis(), sentIntent,
                PendingIntent.FLAG_UPDATE_CURRENT));
4

2 に答える 2

3

私はばかです:

// Field descriptor #14 I
public static final int RESULT_OK = -1;
于 2012-09-02T05:39:32.160 に答える
0

送信レポートと配信レポートを取得するには、次のようにします。

String SENT = "SMS_SENT";
String DELIVERED = "SMS_DELIVERED";

BroadcastReceiver sendingBroadcastReceiver;
BroadcastReceiver deliveryBroadcastReceiver;

PendingIntent sentPI;
PendingIntent deliveredPI;

public void sendSms(String phoneNumber, String message) {
    sentPI      = PendingIntent.getBroadcast(this, 0, new Intent(SENT),      PendingIntent.FLAG_CANCEL_CURRENT);
    deliveredPI = PendingIntent.getBroadcast(this, 0, new Intent(DELIVERED), PendingIntent.FLAG_CANCEL_CURRENT);

    sendingBroadcastReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            switch (getResultCode())
            {
                case Activity.RESULT_OK:
                    break;
                case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
                    break;
                case SmsManager.RESULT_ERROR_NO_SERVICE:
                    break;
                case SmsManager.RESULT_ERROR_NULL_PDU:
                    break;
                case SmsManager.RESULT_ERROR_RADIO_OFF:
                    break;
            }
            BaseActivity.this.unregisterReceiver(this);
        }
    };
}

this.registerReceiver(sendingBroadcastReceiver, new IntentFilter(SENT));

    deliveryBroadcastReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            switch (getResultCode()) {
            case Activity.RESULT_OK:
                break;
            case Activity.RESULT_CANCELED:
                break;                        
            }
            BaseActivity.this.unregisterReceiver(this);
        }
    };

this.registerReceiver(deliveryBroadcastReceiver, new IntentFilter(DELIVERED));   

SmsManager.getDefault().sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI);
//...
}
于 2012-09-01T07:00:41.283 に答える