Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 短信广播接收器接收多次?_Android_Sms_Broadcastreceiver - Fatal编程技术网

Android 短信广播接收器接收多次?

Android 短信广播接收器接收多次?,android,sms,broadcastreceiver,Android,Sms,Broadcastreceiver,我在应用程序中使用sms广播接收器。当我发送第一条短信时,它会弹出一条短信作为短信发送。当我发送第二个请求时,弹出消息会加倍。第三次是三倍,以此类推。我使用以下代码发送和接收广播 private void sendRequest() { String SENT = "SMS_SENT"; String DELIVERED = "SMS_DELIVERED"; PendingIntent sentPI = Pending

我在应用程序中使用sms广播接收器。当我发送第一条短信时,它会弹出一条短信作为短信发送。当我发送第二个请求时,弹出消息会加倍。第三次是三倍,以此类推。我使用以下代码发送和接收广播

  private void sendRequest()
    {        
        String SENT = "SMS_SENT";
        String DELIVERED = "SMS_DELIVERED";

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

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

        //---when the SMS has been sent---
        registerReceiver(new BroadcastReceiver(){
            @Override
            public void onReceive(Context arg0, Intent arg1) {
                switch (getResultCode())
                {
                    case Activity.RESULT_OK:
                        Toast.makeText(getBaseContext(), "SMS sent", 
                                Toast.LENGTH_SHORT).show(); 
                        break;
                    case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
                        Toast.makeText(getBaseContext(), "Invalid PhoneNumber", 
                                Toast.LENGTH_SHORT).show();
                        break;
                    case SmsManager.RESULT_ERROR_NO_SERVICE:
                        Toast.makeText(getBaseContext(), "No service", 
                                Toast.LENGTH_SHORT).show();
                        break;
                    case SmsManager.RESULT_ERROR_NULL_PDU:
                        Toast.makeText(getBaseContext(), "Null PDU", 
                                Toast.LENGTH_SHORT).show();
                        break;
                    case SmsManager.RESULT_ERROR_RADIO_OFF:
                        Toast.makeText(getBaseContext(), "Radio off", 
                                Toast.LENGTH_SHORT).show();
                        break;
                }
            } 
        }, new IntentFilter(SENT));


       SmsManager sms = SmsManager.getDefault();
        sms.sendTextMessage(sms_phonenumber, null, sms_message, sentPI, null);  
我不确定这是否会发生。我正在从mainactivity发送短信


感谢大家的帮助。

看起来不错,因为每次你呼叫
sendRequest
时,你都会再次注册
BroadcastReceiver

您应该只注册一次
BroadcastReceiver
,并且在活动开始之前应该取消注册


只在
onStart
onStop
中注册和取消注册工作一次,就像在中一样,谢谢您的回答。。如果你能让我知道如何取消注册上述代码..做注册和取消注册的工作只有一次在onStart和onStop。。。或者把广播接收器放在XML里哦我有东西给你