gpt4 book ai didi

android - 检查用户是否一直停留在同一个位置

转载 作者:行者123 更新时间:2023-11-29 01:38:57 24 4
gpt4 key购买 nike

我正在开发一个对用户位置敏感的 Android 应用程序。

一旦用户在一个位置停留了很长时间(例如20分钟),那么我们应该做一些相应的事情(将最近的 parking 位状态设置为“忙碌”),一旦他离开那个位置设置状态最近的 parking 位最近的“免费”。

现在我可以获得已注册的 LocationListener 的用户位置,但是我有两个问题:

1)如何跟踪用户位置以确定他是否在指定时间在同一位置有风格?

我想创建一个 Handler 并运行一个任务来检查位置:

private Location mLastLocation;
private Location mCurrentLocation;

private Handler mHandler = new Handler();
private Runnable mLocationCalculateRunnable = new Runnable() {
@Override
public void run() {
if (mCurrentLocation != null) {
if (!userLocationChanged()) {

} else {

}
}
mHandler.postDelayed(mLocationCalculateRunnable,10000); //check every 10 seconds
}

private boolean userLocationChanged() {
return getDistance(mCurrentLocation, mLastLocation) > 5;
}
};
mHandler.postDelayed(mLocationCalculateRunnable,1000);


private void onLocationChanged(Location location) {
mLastLocation = mCurrentLocation;
mCurrentLocation = location;
}

但是我无法继续查看位置和时间。

2)即使用户点击back键回到主屏幕,应用程序也应该运行,并且屏幕可能会熄灭,甚至cpu可能会进入休眠状态。

如果是这样,我可能无法获得新位置,处理程序也可能会停止。

我想知道我的位置检查想法是否正确以及如何让应用程序在任何情况下保持运行?

顺便说一句,我无法访问谷歌相关服务。

最佳答案

1) 使用定义为 LocationManager 设置适当的更新。这些定义是更新用户位置所需的最短时间和距离。

locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER,
MIN_TIME_BW_UPDATES,
MIN_DISTANCE_CHANGE_FOR_UPDATES, this);

2) 运行将在后台运行的服务

小代码示例:

public class GPSservice extends Service implements LocationListener {


private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 2;

private static final long MIN_TIME_BW_UPDATES = 1000 * 1;

double latitude, longitude;

boolean isGPSEnabled = false;

boolean isNetworkEnabled = false;

boolean canGetLocation = false;

Location location;

protected LocationManager locationManager;


@Override
public int onStartCommand(Intent intent, int flags, int startId) {

getLocation();

return super.onStartCommand(intent, flags, startId);
}


@Override
public void onLocationChanged(Location location) {
new LocationReceiver(location, getApplicationContext());
}


@Override
public void onStatusChanged(String provider, int status, Bundle extras) {

}

@Override
public void onProviderEnabled(String provider) {

}

@Override
public void onProviderDisabled(String provider) {

}

public Location getLocation() {
try {
locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

// getting GPS status
isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);

isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);

if (!isGPSEnabled && !isNetworkEnabled) {
Log.d("Network", "OFF");
} else {
this.canGetLocation = true;
if (isNetworkEnabled) {
locationManager.requestLocationUpdates(
LocationManager.NETWORK_PROVIDER,
MIN_TIME_BW_UPDATES,
MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
Log.d("Network", "ON");
if (locationManager != null) {
location = locationManager
.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
if (location != null) {
latitude = location.getLatitude();
longitude = location.getLongitude();
}
}
}
if (isGPSEnabled) {
if (location == null) {
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER,
MIN_TIME_BW_UPDATES,
MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
Log.d("GPS Enabled", "ON");
if (locationManager != null) {
location = locationManager
.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (location != null) {
latitude = location.getLatitude();
longitude = location.getLongitude();
}
}
}
}
}

} catch (Exception e) {
e.printStackTrace();
}

return location;
}
}

关于android - 检查用户是否一直停留在同一个位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26034464/

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