也许我误解了,但我在android中locationmanager
和locationlistener
找到的所有文章都引用了onLocationChanged()
方法。
我希望获得用户的当前位置,而不是更改时的位置。我使用正确的方法吗? locationchanged侦听器正在工作,并且在我更改位置时,模拟器会运行该方法。
我的应用工作流程是:
-> App gets request from server for location
-> locationservice starts and stays on for 5 seconds to get the location
-> locationservice saves the location to preferences
-> locationservice stops
-> messaging service sends location to server
是位置监听器的正确方法吗?如果用户没有更改位置,它仍然可以工作吗?
这是我的位置服务:
public class MyLocationService extends Service {
public LocationManager locationManager;
public LocationListener mLocationListener;
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@SuppressLint("MissingPermission")
public int onStartCommand(Intent intent, int flags, int startId){
locationManager = (LocationManager)getSystemService(LOCATION_SERVICE);
mLocationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(MyLocationService.this).edit();
editor.putString("latitude", Double.toString(location.getLatitude()));
editor.putString("longitude", Double.toString(location.getLongitude()));
editor.commit();
System.out.println("Location got changed");
}
@Override
public void onStatusChanged(String s, int i, Bundle bundle) {
}
@Override
public void onProviderEnabled(String s) {
}
@Override
public void onProviderDisabled(String s) {
}
};
try {
locationManager.requestLocationUpdates(locationManager.getBestProvider(new Criteria(), true), 10000, 0, mLocationListener);
} catch (Exception e){
e.printStackTrace();
}
return START_STICKY;
}
}
但位置更改仅在我执行该服务时才会注册。每次服务运行时如何运行?
答案 0 :(得分:0)
将第一次LocationManager
触发LocationListener::onLocationChanged
时获取用户的当前位置。
如果您只对当前位置感兴趣,可以设置LocationListener
以接收第一个位置更新,然后停止。
public void onLocationChanged(Location location) {
// location gotten... store it somewhere
// and stop the location manager
locationManager.removeUpdates(this.locationListener);
}
仍然会LocationListener::onLocationChanged
触发,具体取决于您为criteria
设置的LocationManager
。
例如:
this.locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this.locationListener);
不受任何标准的限制,它会不断请求位置更新。
是位置监听器的正确方法吗?如果用户没有更改位置,它仍然可以工作吗?
是