Android:实现LocationManager的最佳实践

Android:实现LocationManager的最佳实践,android,android-service,locationmanager,locationlistener,Android,Android Service,Locationmanager,Locationlistener,我让一个应用程序发送纬度和经度的坐标,所以我扩展了一个服务并实现了LocationManager。 这是我代码的一部分: 公共类LocationServiceTracking扩展服务实现LocationListener{ .... @凌驾 public void onCreate(){ super.onCreate(); mLocationManager=(LocationManager)getSystemService(Context.LOCATION\u服务); if(isGPSEnabl

我让一个应用程序发送纬度和经度的坐标,所以我扩展了一个服务并实现了LocationManager。 这是我代码的一部分:

公共类LocationServiceTracking扩展服务实现LocationListener{
....
@凌驾
public void onCreate(){
super.onCreate();
mLocationManager=(LocationManager)getSystemService(Context.LOCATION\u服务);
if(isGPSEnabled&&provider.equals(LocationManager.GPS\u provider)){
试一试{
mLocationManager.requestLocationUpdates(3000,0,criteria,this,null);
Log.d(“GPS启用”、“GPS启用”);
}捕获(安全异常se){
se.printStackTrace();
Crashlytics.logException(se);
}
}
}
@凌驾
公共int onStartCommand(Intent Intent、int标志、int startId){
返回开始时间;
}

}
了解android的FusedLocationProvider api

它将处理大多数复杂问题。如果不启用gps,它将从网络提供商处获取坐标等。 请在这里阅读:


为简洁起见,请使用融合位置api

关于您的问题-最好在
onCreate()
中执行,因为
onStartCommand()
的调用次数与您触发启动服务的次数相同,只有在实际创建服务时才会调用onCreate

它应该在
onstart命令()中

原因:
onCreate()
将在创建服务时调用 但是手动启动时将调用
onStartCommand()
通过调用
obj.startService()
提供服务

因此,如果您将代码放入
onCreate()
中,您将在启动服务之前开始接收更新,这不是一个好的做法。在
服务中写入的代码
只有在已启动已绑定时才应启用

例如

MyService serviceObj = new MyService(); // this will call onCreate().

serviceObj.startService(); // this will call `onStartCommand()`.

serviceObj.bindService(); // this will call onBind(). (Not your case).

希望这有帮助。

在类中创建一个名为
mgoogleapclient
的字段

然后在
onCreate
中执行以下操作:

// Create an instance of GoogleAPIClient.
if (mGoogleApiClient == null) {
    mGoogleApiClient = new GoogleApiClient.Builder(getActivity())
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .addApi(LocationServices.API)
            .build();
}
当类加载并停止时,处理此字段的生命周期:

public void onStart() {
    mGoogleApiClient.connect();
    super.onStart();
}

public void onStop() {
    mGoogleApiClient.disconnect();
    super.onStop();
}
现在实现以下接口:

GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener
并添加他们的方法:

@Override
public void onConnected(Bundle connectionHint) {
    Log.d(TAG, "Google Maps API::onConnected");
    //For Marshmallow 6.0, make sure to check Permissions
    mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
}

@Override
public void onConnectionSuspended(int i) {
    Log.d(TAG, "Google Maps API::onConnectionSuspended");
}

@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
    Log.d(TAG, "Google Maps API::onConnectionFailed");
}