开发者

Android Communication between Broadcast Receiver and MainActivity (Send data to activity)

开发者 https://www.devze.com 2023-01-23 23:26 出处:网络
I\'ve a simple Main Activity which has to stop till an SMS is received... How can I launch a method from the MainActivity within the BroadcastReceiver\'s onReceive() Method?

I've a simple Main Activity which has to stop till an SMS is received... How can I launch a method from the MainActivity within the BroadcastReceiver's onReceive() Method?

Is there away with Signal and Wait? Can I pass something with a pending Intent, or how can I imple开发者_如何学运维ment this communication?


Communication from BroadcastReceiver to Activity is touchy; what if the activity is already gone?

If I were you I'd set up a new BroadcastReceiver inside the Activity, which would receive a CLOSE message:

private BroadcastReceiver closeReceiver;
// ...
closeReceiver = new BroadcastReceiver() {
  @Override
  public void onReceive(Context context, Intent intent) {

  //EDIT: receiving parameters
  String value = getIntent().getStringExtra("name"); 
  //... do something with value

  finish();
  }
};
registerReceiver(closeReceiver, new IntentFilter(CLOSE_ACTION));

Then from the SMS BroadcastReceiver you can send out this action:

Intent i = new Intent(CLOSE_ACTION);
i.putExtra("name", "value"); //EDIT: this passes a parameter to the receiver
context.sendBroadcast(i);

I hope this helps?


I had the exact same problem, I tried using intent but i was unsuccessful

The easiest way to use it would be using static methods and static variables

MainActivity.java

public static void stopsms()
{

/*
some code to stop the activity

*/

}

SMSReceiver.java

at the end call this function

MainActivity.stopsms();

It works amazing if your code does not affect when you use static methods and variables. Let me know if you need any help.


The problem with registering a second receiver within the activity, however, is that it will not be persistent like registering in the manifest... thus, although, this solution may work, will only work if the activity is running in background.


it's easy, use interface like that:

1) in your broadcast receiver create an interface.

public interface ChangeListener{
    public void functionWhoSendData(String type);
    public void etc();
}

and instantiate that interface in your broadcast receiver, use it:

public void onReceive(....
    String data=functionWhereYouReceiveYouData();
    ChangeListener.functionWhoSendData(data);
}

And in your activity, make it implements your interface

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号