我正在开发实时应用程序,因此我需要使用rest API将连续或某些周期性(以秒为单位)位置数据作为纬度和经度发送到Web服务。那么我可以使用什么来向服务器发送连续或定期数据?我需要使用背景服务还是其他什么?我不知道后台服务如何工作以及如何使用它?所以有人可以帮助我吗?提前谢谢。
protected void startLocationUpdates() {
LocationServices.FusedLocationApi.requestLocationUpdates(
mGoogleApiClient, mLocationRequest, this);
}
protected void stopLocationUpdates() {
LocationServices.FusedLocationApi.removeLocationUpdates(
mGoogleApiClient, this);
}
@Override
public void onConnectionFailed(ConnectionResult result) {
Log.i(TAG, "Connection failed: ConnectionResult.getErrorCode() = "
+ result.getErrorCode());
}
@Override
public void onConnected(Bundle arg0) {
displayLocation();
if (mRequestingLocationUpdates) {
startLocationUpdates();
}
}
@Override
public void onConnectionSuspended(int arg0) {
mGoogleApiClient.connect();
}
@Override
public void onLocationChanged(Location location) {
mLastLocation = location;
Toast.makeText(getApplicationContext(), "Location changed!",
Toast.LENGTH_SHORT).show();
displayLocation();
}
答案 0 :(得分:1)
如果要在应用程序关闭后继续向服务器发送数据,则需要为此设置服务。
以下是我如何提供服务。
public class FeatureService extends Service
{
@Nullable
@Override
public IBinder onBind(Intent intent)
{
return null;
}
@Override
public void onCreate()
{
// make your api call here and other implementations according to your requirement.
super.onCreate();
}
@Override
public void onDestroy()
{
// what you want when service is destroyed
}
在Manifest中声明您的服务
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service
android:name="Your Serive"
android:enabled="true">
</service>
</application>
最后在相关活动的onCreate中调用您的服务。
Intent i= new Intent(this,FeatureService.class);
startService(i);
答案 1 :(得分:0)
获取lat和Long值,然后安排定期任务以运行方法将值发送到服务器
您可以使用Job Scheduler(https://developer.android.com/reference/android/app/job/JobScheduler.html)
或
您可以使用android-job / evernote执行定期任务 (https://github.com/evernote/android-job)
private void schedulePeriodicJob() {
int jobId = new JobRequest.Builder(DemoSyncJob.TAG)
.setPeriodic(TimeUnit.MINUTES.toMillis(15), TimeUnit.MINUTES.toMillis(5))
.setPersisted(true)
.build()
.schedule();
}