gpt4 book ai didi

android 始终运行应用程序,即使应用程序在后台

转载 作者:行者123 更新时间:2023-11-30 02:49:20 25 4
gpt4 key购买 nike

我想做以下事情:

1]- 监听手机GPS位置变化并发送给服务器,持续跟踪用户位置

2]- 我找到了一个使用 LocationListener 查找 GPS 位置的示例

3]- 我找到了一种在设备重启时打开我的应用程序的方法

即使用户将应用程序置于后台,我也需要一些帮助才能发送此数据

这里有什么帮助吗?

最佳答案

这个服务应该在后台运行

LocationClient是位置相关 API(例如位置和地理围栏)的主要入口点。

使用 LocationClient 来:

  • 连接和断开与 Google 定位服务的连接。
  • 请求/删除位置更新回调。
  • 请求/移除地理围栏。

为了建立连接,调用 connect() 并等待 onConnected(android.os.Bundle) 回调。

LocationRequest对象用于从 LocationClient 请求位置更新的服务质量。

在 LocationRequest 中,您可以在那里设置参数,例如位置的准确性和位置更新之间的时间间隔。

onLocationChanged将根据您在 LocationRequest 中设置的时间间隔被调用,您可以从那里更新您的服务器。该服务不在后台运行,因此您需要使用 AsyncTask 更新服务器或者其他方式,只需确保服务器更新是在后台线程上完成的。

public class LocationUpdatesService extends Service implements GooglePlayServicesClient.ConnectionCallbacks,
GooglePlayServicesClient.OnConnectionFailedListener,
LocationListener {
private static int LOCATION_UPDATE_INTERVAL = 30000; // how often you will get a location update (this is in milliseconds)
private LocationClient locationClient;
private LocationRequest locationRequest;
private boolean isConnected = false;

@Override
// onCreate is called when the service gets started (from an Activity) than immediately calls onStartCommand
public void onCreate() {
super.onCreate();

if (servicesConnected()) {
startLocationUpdates();
} else {
// isGooglePlayServicesAvailable FAILURE
}
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return Service.START_STICKY;
}

@Override
public IBinder onBind(Intent intent) {
return null;
}

private boolean servicesConnected() {
int resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
if (ConnectionResult.SUCCESS == resultCode) {
return true;
} else {
return false;
}
}

public void startLocationUpdates() {

locationRequest = LocationRequest.create();
locationRequest.setInterval(LOCATION_UPDATE_INTERVAL);
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
locationRequest.setFastestInterval(LOCATION_UPDATE_INTERVAL);
locationClient = new LocationClient(this, this, this);
locationClient.connect();
isConnected = true;
}

@Override
public void onDestroy() {
if (locationClient.isConnected()) {
onDisconnectClient();
} else {
// locationClient is disconnected
}
super.onDestroy();
}

private void onDisconnectClient() {
isConnected = false;
locationClient.removeLocationUpdates(this);
locationClient.disconnect();
locationRequest = null;
locationClient = null;
}


@Override
public void onLocationChanged(Location location) {
// update server from here with AsyncTask (or some other way but in the background)
}

@Override
public void onConnectionFailed(ConnectionResult connectionResult) {

}

@Override
public void onConnected(Bundle bundle) {
locationClient.requestLocationUpdates(locationRequest, this);
}

@Override
public void onDisconnected() {
}

}

有用的链接:

http://developer.android.com/reference/android/app/Service.html

http://developer.android.com/guide/components/services.html

http://developer.android.com/reference/android/location/LocationListener.html

https://developer.android.com/reference/com/google/android/gms/location/LocationRequest.html

https://developer.android.com/reference/com/google/android/gms/location/LocationListener.html

关于android 始终运行应用程序,即使应用程序在后台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24476074/

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