Android:实现LocationManager的最佳实践
我让一个应用程序发送纬度和经度的坐标,所以我扩展了一个服务并实现了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
公共类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");
}