如何在MainActivity.java中监听GPS更新并接收值?

时间:2013-12-19 18:15:55

标签: android class gps

我正在开发一个原型样本应用程序。 我在GPS.java文件中有一个GPS类,它实现了LocationListener。 我有一个MainActivity.java文件,其中我有一个GPS实例,我想将位置更新为文本字段。我看过很多例子,其中Activity本身实现了OnLocationChanged,使得它能够访问TextView字段。但是,我想要外化文件。我怎样才能做到这一点?我是Java的新手。在javascript / AS3中,我会广播一个事件,并有一个监听器来识别和获取值。我不完全确定如何实现这一目标。

4 个答案:

答案 0 :(得分:1)

在GPS课程中创建interface,然后在主要活动中设置监听器以收听回调。然后,当您的位置更改触发该回调与新位置。

它看起来像这样

GPS gps = new GPS();
gps.setLocationListener(new OnMyGpsLocationChanged(){
    @Override
    public void myLocationChanged(Location location){
        //use the new location here
    }
)}; 

GPS类会有这样的东西

public interface OnMyGpsLocationChanged{
    public void myLocationChanged(Location location);
}

然后当你改变位置时,你就会做

listener.myLocationChanged(location);

在您的LocationManager的onLocationChanged中

答案 1 :(得分:1)

将参考传递给GPS类中的上下文(或者更好,在Service中实现)。接下来,在MainActivity类中注册一些自定义操作的广播接收器,例如com.mypackage.ACTION_RECEIVE_LOCATION.

在您的GPS课程的onLocationChanged(Location location)方法中,当您收到符合您目的的位置时,请将其作为额外内容广播。

Intent toBroadcast = new Intent(com.mypackage.ACTION_RECEIVE_LOCATION);
toBroadcast.putExtra(MainActivity.EXTRA_LOCATION,location);
context.sendBroadcast(toBroadcast);

在您的MainActivity的注册接收器中,接收广播并处理该位置。

public class MainActivity extends Activity {

public static final String EXTRA_LOCATION = "EXTRA_LOCATION";

    private class LocationUpdateReceiver extends BroadcastReceiver {

        /**
         * Receives broadcast from GPS class/service.
         */
        @Override
        public void onReceive(Context context, Intent intent) {
            Bundle extras = intent.getExtras();

            Location location = (Location) extras.get(MainActivity.EXTRA_LOCATION);

                //DO SOMETHING
               ...

  }
}

答案 2 :(得分:0)

在活动中使用带有侦听器的位置管理器。它在此活动中自动更新。

requestLocationUpdates(String,long,float,LocationListener);

http://developer.android.com/reference/android/location/LocationListener.html

我希望它能奏效。

答案 3 :(得分:0)

你也可以在这里做同样的事情:

在你的活动中创建一个广播接收器如下:

public class MyReceiver extends BroadcastReceiver {

  @Override
  public void onReceive(Context context, Intent intent) {
    <YourTextView>.setText(intent.getStringExtra("lat"));
  }
} 

使用某些自定义意图过滤器在onCreate of activity中注册此接收器:

MyReceiver mr=new MyReceiver ();
this.registerReceiver(mr,new IntentFilter("my-event"));
onPause中的

this.unregisterReceiver(mr);

现在在onLocationChanged回调的GPS课程中只发送一个广播:

public void onLocationChanged(Location location) {
    Intent intent = new Intent();
    intent.putExtra("lat",location.getLatitude());
    intent.setAction("my-event");
    sendBroadcast(intent);
}