如何在android java中获取设备的绝对当前位置

时间:2018-02-22 09:26:11

标签: java android

也许我误解了,但我在android中locationmanagerlocationlistener找到的所有文章都引用了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;
   }
}

但位置更改仅在我执行该服务时才会注册。每次服务运行时如何运行?

1 个答案:

答案 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);

不受任何标准的限制,它会不断请求位置更新。

  

是位置监听器的正确方法吗?如果用户没有更改位置,它仍然可以工作吗?