1

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

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、我的应用程序或任何其他应用程序中)打开地图时,即使我的应用程序不在最近的应用程序列表中,它也会显示 toast。因此,我可以说我的服务正在运行,即使我的应用被最近的应用杀死,但 locationmanager 无法获取位置更新。

我试图找出解决方案,并找到了使用 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());
4

1 回答 1

1

将位置代码放入粘性服务中,然后将该服务作为foreground. 看看这个以获取更多信息

于 2018-09-27T11:56:39.437 回答