我在后台服务中使用融合位置提供程序,以获得使用onLocationChanged尝试的结果,并尝试使用待定意图的广播接收器。当我使用" PRIORITY_BALANCE_ACCURACY"一切都很好,位置正在按预期更新,但当我使用" PRIORITY_HIGH_ACCURACY"位置只是停止更新....我甚至尝试过alarmreceiver但结果仍然是相同的,每次使用" PRIORITY_HIGH_ACCURACY"在睡眠模式下,位置不会更新...但是当我打开屏幕时,我会获得位置更新...
我真的需要精确的位置......即使屏幕关闭,任何帮助都会受到赞赏....
答案 0 :(得分:0)
如果对您来说不是太多,为什么不尝试使用谷歌的位置服务:
app.gradle上的:
compile 'com.google.android.gms:play-services-location:9.0.2'
以及活动:
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();
这是谷歌客户端连接后位置更新的开始:
void startLocationUpdates(){
if(apiClient!=null && apiClient.isConnected()) {
LocationServices.FusedLocationApi.requestLocationUpdates(apiClient, locationRequest, ActivityName.this);
Log.e(TAG, "Location Updates started");
}
}
还要确保该活动实现了LocationListener,以便您可以收听位置更新:
@Override
public void onLocationChanged(Location updatedLocation) {
Log.e(TAG,"LOCATIONUPDATE: "+updatedLocation.toString());
}
答案 1 :(得分:0)
如果您使用的是android O,只需将服务设为前台
如果您使用的是下一个,这就是我要做的: 我正在使用服务来更新位置信息 当应用程序在后台或屏幕关闭时跟踪用户位置时,Android操作系统限制了该应用程序停止位置更新。
如果您希望应用程序即使在屏幕关闭的情况下也使用位置更新,则应在关闭电源或关闭屏幕5分钟后将应用程序带到前台(前景)