Sending Intent from BroadcastReceiver class to currently running activity

后端 未结 2 1381
名媛妹妹
名媛妹妹 2021-02-15 12:26

I have a class which extends BroadcastReceiver. On receiving a SMS, I would like to pass information to my main activity class to display the text in a box (Append,

2条回答
  •  不知归路
    2021-02-15 12:48

    You have three ways:
    1) You can define your broadcast inside your MainActivity like this:
    in onCreate()

    registerReceiver(smsReceiver, new IntentFilter(SMS_RECIEVED));  
    

    and define smsReciver in MainActivity

    private BroadcastReceiver smsReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            //you can update textBox here
            handler.postDelayed(sendUpdatesToUI, 10);  
        }
    };  
    

    define a runnable to update UI

    private Runnable sendUpdatesToUI = new Runnable() {
        public void run() {
            update();
        }
    };
    

    and update method

    private void update(String text) {
        textView.setText(textView.getText().toString() + text);
    } 
    

    2) Register a receiver between your Activity and BroadCastReceiver

    3) Start your Activity with new Intent to update current open Activity

    Intent intent = new Intent(context, MainActivity.class);
    intent.putExtra("Key", "text");
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(intent);  
    

    UPDATE :
    explain method 2
    MainActivity.class

    in onResume()

    registerReceiver(broadcastReceiver, new IntentFilter(SmsReceiver.BROADCAST_ACTION));  
    

    in onDestroy()

    unregisterReceiver(broadcastReceiver);
    

    local broadCast (broadcastReceiver, in MainActivity.class)

    private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            updateUI(intent);
        }
    };
    private void updateUI(Intent intent) {
        String text = intent.getStringExtra("key");
        textView.setText(textView.getText().toString() + text);
    }
    

    SmsReceiver.class
    global attribute

    public static final String BROADCAST_ACTION = "your.package.name.displayevent";
    private final Handler handler = new Handler();
    Intent intent;
    Context context;
    

    in onReceive()

    handler.removeCallbacks(sendUpdatesToUI);
    handler.postDelayed(sendUpdatesToUI, 10);
    
    this.context = context;//you can retrieve context from onReceive argument
    
    this.intent = new Intent(BROADCAST_ACTION);
    

    define two method

    private Runnable sendUpdatesToUI = new Runnable() {
        public void run() {
            display();
        }
    };
    
    private void display() {
        intent.putExtra("key", text);
        context.sendBroadcast(intent);
    }
    

提交回复
热议问题