How to register broadcast receiver?

前端 未结 3 1691
暖寄归人
暖寄归人 2020-12-18 12:08

Here is my source code and it keeps force closing everytime I run it...

public class MainActivity extends Activity {
    private static String content;
    p         


        
相关标签:
3条回答
  • 2020-12-18 12:18

    The force close is likely happening because you are managing the UI from within your broadcast receiver. There's a 10-second limit on a BR's onReceive before it is forced closed.

    To solve, use an Activity component to generate your Toast.

    0 讨论(0)
  • 2020-12-18 12:20

    You need to move your receiver outside the onCreate. something like -

    public class MainActivity extends Activity {
    private static String content;
    private static String phone;
    private String number;
    private String message;
    
    private  BroadcastReceiver receiver =  new BroadcastReceiver(){
    
        @Override
        public void onReceive(Context context, Intent intent) {
            //---get the SMS message passed in---
            Bundle bundle = intent.getExtras();        
            SmsMessage[] msgs = null;
    
            if (bundle != null)
            {
                number = "";
                 message = "";
                //---retrieve the SMS message received---
                Object[] pdus = (Object[]) bundle.get("pdus");
                msgs = new SmsMessage[pdus.length];            
                for (int i=0; i<msgs.length; i++){
                    msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);                
                    number = msgs[i].getOriginatingAddress();                     
    
                   message = msgs[i].getMessageBody();
    
    
                }
                //---display the new SMS message--- 
                Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
                SendMe();
        }
        }
    
    
      };
    
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        IntentFilter filter = new IntentFilter();
        filter.addAction(YOUR_SMS_ACTION);
        this.registerReceiver(this.receiver, filter);
        setContentView(R.layout.main);
        }
    
    
    public void SendMe(){
    
    
        PendingIntent pi =  PendingIntent.getActivity(this, 0,
                    new Intent(this, MainActivity.class), 0);  
        SmsManager sms = SmsManager.getDefault();
        sms.sendTextMessage(number, null, message, pi, null);
    
    }
    }
    
    0 讨论(0)
  • 2020-12-18 12:29

    I am a little confused here. It seems that you want to register aBroadcastReceiver for the "SMS_RECEIVED" IntentFilter but the filter has not been declared anywhere in the code as far as I can see.

    Try replacing the null at the end of registerReceiver {} to new IntentFilter("SMS_RECEIVED")); to see if it works. Maybe its the reason why you are getting a null pointer exception.

    i.e. } } }, null);

    to } } }, new IntentFilter("SMS_RECEIVED"));

    0 讨论(0)
提交回复
热议问题