Android融合位置提供程序在睡眠模式下停止更新

时间:2016-07-20 00:36:13

标签: android geolocation android-service fusedlocationproviderapi

我在后台服务中使用融合位置提供程序,以获得使用onLocationChanged尝试的结果,并尝试使用待定意图的广播接收器。当我使用" PRIORITY_BALANCE_ACCURACY"一切都很好,位置正在按预期更新,但当我使用" PRIORITY_HIGH_ACCURACY"位置只是停止更新....我甚至尝试过alarmreceiver但结果仍然是相同的,每次使用" PRIORITY_HIGH_ACCURACY"在睡眠模式下,位置不会更新...但是当我打开屏幕时,我会获得位置更新...

我真的需要精确的位置......即使屏幕关闭,任何帮助都会受到赞赏....

2 个答案:

答案 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分钟后将应用程序带到前台(前景)