如何定期向Web服务器发送位置数据(纬度,经度)

时间:2017-03-31 07:29:07

标签: android api service background location

我正在开发实时应用程序,因此我需要使用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();
    }

2 个答案:

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