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