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 分钟后将应用程序置于最前面(前台)