Android 融合位置提供商在休眠模式下停止更新
Android fused location provider stop updating in sleep mode
我在我的后台服务中使用融合位置提供程序,为了获得我尝试使用 onLocationChanged 的结果,还尝试使用未决意图的广播接收器。当我使用 "PRIORITY_BALANCE_ACCURACY" 时一切正常,并且位置正在按预期更新,但是当我使用 "PRIORITY_HIGH_ACCURACY" 位置时就停止更新....我什至尝试过 alarmreceiver 但结果仍然相同,每次我使用 "PRIORITY_HIGH_ACCURACY" 位置在睡眠模式下不会更新...但是当我打开屏幕时我会获得位置更新...
我真的需要精确的位置...即使屏幕关闭,我们也将不胜感激...
如果这对您来说不是太多,为什么不尝试使用 google 的定位服务:
在 app.gradle 上:
compile 'com.google.android.gms:play-services-location:9.0.2'
在 activity 上:
locationRequest = new LocationRequest()
.setFastestInterval(5000)
.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
.setSmallestDisplacement(10);
GoogleApiClient.Builder clientBuilder = new GoogleApiClient.Builder(ActivityName.this)
.addApi(LocationServices.API)
.addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() {
@Override
public void onConnected(@Nullable Bundle bundle) {
Log.e(TAG,"API CLIENT CONNECTED");
startLocationUpdates();
}
@Override
public void onConnectionSuspended(int i) {
Log.e(TAG,"API CLIENT SUSPENDED");
}
})
.addOnConnectionFailedListener(new GoogleApiClient.OnConnectionFailedListener() {
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
Log.e(TAG,"API CLIENT CONNECTION FAILED");
}
});
apiClient= clientBuilder.build();
apiClient.connect();
这是 google 客户端连接后位置更新的开始:
void startLocationUpdates(){
if(apiClient!=null && apiClient.isConnected()) {
LocationServices.FusedLocationApi.requestLocationUpdates(apiClient, locationRequest, ActivityName.this);
Log.e(TAG, "Location Updates started");
}
}
还要确保 activity 实现了 LocationListener,以便您可以收听您的位置更新:
@Override
public void onLocationChanged(Location updatedLocation) {
Log.e(TAG,"LOCATIONUPDATE: "+updatedLocation.toString());
}
如果你用的是android O,就把服务前台设为
如果您使用的是较低的,这就是我所做的:
我正在使用服务进行位置更新仅供参考
当应用程序处于后台或屏幕关闭时跟踪用户位置时 Android OS 限制应用程序停止位置更新。
如果您希望应用程序在屏幕关闭时使用位置更新,您应该在关闭电源或屏幕关闭 5 分钟后将应用程序置于最前面(前台)
我在我的后台服务中使用融合位置提供程序,为了获得我尝试使用 onLocationChanged 的结果,还尝试使用未决意图的广播接收器。当我使用 "PRIORITY_BALANCE_ACCURACY" 时一切正常,并且位置正在按预期更新,但是当我使用 "PRIORITY_HIGH_ACCURACY" 位置时就停止更新....我什至尝试过 alarmreceiver 但结果仍然相同,每次我使用 "PRIORITY_HIGH_ACCURACY" 位置在睡眠模式下不会更新...但是当我打开屏幕时我会获得位置更新...
我真的需要精确的位置...即使屏幕关闭,我们也将不胜感激...
如果这对您来说不是太多,为什么不尝试使用 google 的定位服务:
在 app.gradle 上:
compile 'com.google.android.gms:play-services-location:9.0.2'
在 activity 上:
locationRequest = new LocationRequest()
.setFastestInterval(5000)
.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
.setSmallestDisplacement(10);
GoogleApiClient.Builder clientBuilder = new GoogleApiClient.Builder(ActivityName.this)
.addApi(LocationServices.API)
.addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() {
@Override
public void onConnected(@Nullable Bundle bundle) {
Log.e(TAG,"API CLIENT CONNECTED");
startLocationUpdates();
}
@Override
public void onConnectionSuspended(int i) {
Log.e(TAG,"API CLIENT SUSPENDED");
}
})
.addOnConnectionFailedListener(new GoogleApiClient.OnConnectionFailedListener() {
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
Log.e(TAG,"API CLIENT CONNECTION FAILED");
}
});
apiClient= clientBuilder.build();
apiClient.connect();
这是 google 客户端连接后位置更新的开始:
void startLocationUpdates(){
if(apiClient!=null && apiClient.isConnected()) {
LocationServices.FusedLocationApi.requestLocationUpdates(apiClient, locationRequest, ActivityName.this);
Log.e(TAG, "Location Updates started");
}
}
还要确保 activity 实现了 LocationListener,以便您可以收听您的位置更新:
@Override
public void onLocationChanged(Location updatedLocation) {
Log.e(TAG,"LOCATIONUPDATE: "+updatedLocation.toString());
}
如果你用的是android O,就把服务前台设为
如果您使用的是较低的,这就是我所做的: 我正在使用服务进行位置更新仅供参考 当应用程序处于后台或屏幕关闭时跟踪用户位置时 Android OS 限制应用程序停止位置更新。
如果您希望应用程序在屏幕关闭时使用位置更新,您应该在关闭电源或屏幕关闭 5 分钟后将应用程序置于最前面(前台)