如何将广播接收器的结果数据发送到活动

我有一个活动,调用广播接收器。 广播接收器等待并收听GPS。 当监听者得到新的点时,我想把这个新的点发送给Activity。 我如何将数据从广播接收器发送到活动?

我需要一个监听器在我的Activity中等待Broadcast Receiver的响应。 我怎样才能做到这一点?

Solutions Collecting From Web of "如何将广播接收器的结果数据发送到活动"

你可以从你的活动中调用接收者。 如果您不想在您的活动中添加接收器的逻辑,则可以使用抽象接收器。

你抽象接收器:

public abstract class SmsReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { //Add you receiver logic here ... ... onNewPosition(); } protected abstract void onNewPosition(); } 

在你的活动中:

 public class MyActivity extends Activity { private smsReceiver smsReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.map_one_position); smsReceiver = new smsReceiver() { // this code is call asyncrously from the receiver @Override protected void onNewPosition() { //Add your activty logic here } }; IntentFilter intentFilter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED"); intentFilter.setPriority(999); this.registerReceiver(smsReceiver, intentFilter); } @Override protected void onPause() { super.onPause(); this.unregisterReceiver(this.smsReceiver); } } 

我希望这会帮助你…

我为接收器定义了一个监听器,并在活动中使用它,现在它运行的很好。 以后可能会发生什么问题吗?

 public interface OnNewLocationListener { public abstract void onNewLocationReceived(Location location); 

}

在我的接收机类中,被命名为ReceiverPositioningAlarm:

 // listener ---------------------------------------------------- static ArrayList<OnNewLocationListener> arrOnNewLocationListener = new ArrayList<OnNewLocationListener>(); // Allows the user to set an Listener and react to the event public static void setOnNewLocationListener( OnNewLocationListener listener) { arrOnNewLocationListener.add(listener); } public static void clearOnNewLocationListener( OnNewLocationListener listener) { arrOnNewLocationListener.remove(listener); } // This function is called after the new point received private static void OnNewLocationReceived(Location location) { // Check if the Listener was set, otherwise we'll get an Exception when // we try to call it if (arrOnNewLocationListener != null) { // Only trigger the event, when we have any listener for (int i = arrOnNewLocationListener.size() - 1; i >= 0; i--) { arrOnNewLocationListener.get(i).onNewLocationReceived( location); } } } 

并在我的一个活动的方法:

 OnNewLocationListener onNewLocationListener = new OnNewLocationListener() { @Override public void onNewLocationReceived(Location location) { // do something // then stop listening ReceiverPositioningAlarm.clearOnNewLocationListener(this); } }; // start listening for new location ReceiverPositioningAlarm.setOnNewLocationListener( onNewLocationListener); 

你有几个方法可以做到这一点和几个考虑因素。

  1. 你可以轮询,意思是再次使用处理程序或计时器来查看是否已经到达信息。

  2. 您可以将广播接收器注册为您的活动的内部类,然后您可以在您的活动中调用方法。

  3. 你可以通过信息将广播发送给你的class级,但是如果你的活动不在前台,你可能会把它带到那里,而这不是你想要的100%。

关于一些考虑,BroadCastReciver主要用作监听器,而notideider是内部类,在我看来,最好的做法是使用Activities,for Services,您可以将它作为独立类使用,并将其注册到Manifest.xml中。 ..现在你必须记住,当广播正在广播你的活动可能是不活动的方向更改或事件暂停您的应用程序,所以你可能会错过的事件。 我不听系统事件,但对我自己的事件,所以我使用粘滞广播,以防止这个问题。

只需要在活动中实现广播接收器。 向接收者注册活动的上下文。