2

2つの受信者を動的に登録して、送信されたSMSの結果と配信ステータスをコードで取得します。新しいクラスを作成できません。これは、既存のクラス(ダイアログを拡張する)で行う必要があります。受信者の登録を解除するにはどうすればよいですか。

私は他の投稿を読みましたが、それらは役に立ちません。それらは別のクラスを持っているか、xmlマニフェストにレシーバーを登録します。

これが私のコードです

private void sendSMS(String keyword, String msisdn) { 

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

    PendingIntent sentPI = PendingIntent.getBroadcast(mContext, 0,
           new Intent(SENT), 0);

    PendingIntent deliveredPI = PendingIntent.getBroadcast(mContext, 0,
           new Intent(DELIVERED), 0);

    mContext.registerReceiver(new BroadcastReceiver(){
        @Override
        public void onReceive(Context arg0, Intent arg1) {
            switch (getResultCode())
            {
                case Activity.RESULT_OK:
                    break;
                case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
                    sendEventLog("Failed(Generic failure)");    
                    break;
                case SmsManager.RESULT_ERROR_NO_SERVICE:
                    sendEventLog("Failed(No service)");     
                    break;
                case SmsManager.RESULT_ERROR_NULL_PDU:
                    sendEventLog("Failed(Null PDU)");   
                    break;
                case SmsManager.RESULT_ERROR_RADIO_OFF:
                    sendEventLog("Failed(Radio off)");  
                    break;
            }
        }
    }, new IntentFilter(SENT));

    //---when the SMS has been delivered---
    mContext.registerReceiver(new BroadcastReceiver(){
        @Override
        public void onReceive(Context arg0, Intent arg1) {
            switch (getResultCode())
            {
                case Activity.RESULT_OK:
                    break;
                case Activity.RESULT_CANCELED:
                    sendEventLog("Failed(SMS not delivered)"); 
                    break;
            }
        }
    }, new IntentFilter(DELIVERED));

   SmsManager MySmsManager = SmsManager.getDefault();
       MySmsManager.sendTextMessage(msisdn, null, keyword, sentPI, deliveredPI);

    }
4

2 に答える 2

0

オンザフライで作成したレシーバーへの参照を保存するだけです。

BroadcastReceiver rcv;
rcv = new BroadcastReceiver() { ... }
mContext.registerReceiver(rcv);

そして、この参照 ( rcv) を使用して、登録を解除できます。

于 2013-01-28T10:51:17.923 に答える
0

受信者を追跡する以外に選択肢がないようです。

このトピックについては、'anonymous' BroadcastReceiver の登録を解除する必要がありますかも参照してください。

于 2013-01-28T10:54:11.007 に答える