无法在后台获取位置更新

时间:2018-03-04 06:59:28

标签: java android location locationmanager fusedlocationproviderclient

我正在尝试开发一个应用程序,我在其中获取用户位置更新,当用户到达某个位置时,我正在执行某些操作。为了获取位置更新,我使用以下代码。

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
                    1000,1f,locationListener);

我正试图在locationlistener的覆盖方法中捕获位置变化,如下所示:

@Override
public void onLocationChanged(Location location) {
Log.e("JK-->>","location updated by gpsping service-->> "+location.getLatitude()+
                            " "+location.getLongitude());
Toast.makeText(getApplicationContext(),"Location changed!",Toast.LENGTH_SHORT).show();
                }

当我在模拟器上尝试它时,它在前景和后台以及从最近的应用程序列表中删除应用程序后工作正常但问题是,当我在真实设备上尝试它时,当我的应用程序在前景或后台打开时,它显示吐司但是当我从最近的应用程序中删除了我的应用程序,它没有显示吐司。 当我从任何应用程序(例如googlemap,我的应用程序或任何其他应用程序)打开地图时,即使我的应用程序不在最近的应用程序列表中,它也会显示吐司。 因此我可以说我的服务正在运行,即使我的应用程序被最近的应用程序杀死但位置管理员无法获得位置更新。

我试图找出解决方案,我找到了使用FusedLocationProviderClient的建议。我也试过这个,但它也行不通。所以,如果有人有解决方案,请建议。

使用FusedLocationProviderClient

locationRequest = new LocationRequest()
                    .setInterval(1000)
                    .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
                    .setFastestInterval(1000);

            LocationCallback locationCallback = new LocationCallback(){
                @Override
                public void onLocationResult(LocationResult locationResult) {
                    Log.e("JK-->>","location updated by gpsping service-->> "+locationResult.getLastLocation().getLatitude()+
                            " "+locationResult.getLastLocation().getLongitude());
                    Toast.makeText(getApplicationContext(),"Location changed!",Toast.LENGTH_SHORT).show();
                }
            };

            fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(getApplicationContext());
            fusedLocationProviderClient.requestLocationUpdates(locationRequest,locationCallback, Looper.myLooper());

1 个答案:

答案 0 :(得分:1)

将位置代码放入粘性服务中,然后以foreground的身份启动此服务。 看看this了解更多信息