gpt4 book ai didi

java - 无法在后台获取位置更新

转载 作者:行者123 更新时间:2023-11-30 00:05:31 24 4
gpt4 key购买 nike

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

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();
}

当我在模拟器上尝试它时,它在前台和后台以及从最近的应用程序列表中删除应用程序后都可以正常工作,但问题是当我在真实设备上尝试它时,当我的应用程序在前台或后台打开时它显示 toast 但是当我从最近的应用程序中删除了我的应用程序,它没有显示 toast 。当我从任何应用程序(例如在 googlemap、我的应用程序或任何其他应用程序中)打开 map 时,即使我的应用程序不在最近的应用程序列表中,它也会显示 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());

最佳答案

将位置代码放在粘性服务中,然后将此服务作为前台启动。看看this了解更多信息

关于java - 无法在后台获取位置更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49092835/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com