Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 将数据从活动传递到JobService_Android_Jobservice - Fatal编程技术网

Android 将数据从活动传递到JobService

Android 将数据从活动传递到JobService,android,jobservice,Android,Jobservice,我想从Activity类到JobService获取纬度和经度值。我该怎么做?我曾尝试将Intent与putExtras等一起使用(请查看下面的代码),但未能正确使用 主课 protected void createLocationRequest(Bundle bundle) { LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, new Location

我想从Activity类到JobService获取纬度和经度值。我该怎么做?我曾尝试将Intent与putExtras等一起使用(请查看下面的代码),但未能正确使用

主课

protected void createLocationRequest(Bundle bundle) {

    LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, new LocationCallback() {
        @Override
        public void onLocationResult(final LocationResult locationResult) {
            Log.i("onLocationResult", locationResult + "");
            latitude = locationResult.getLastLocation().getLatitude() + "";
            longitude = locationResult.getLastLocation().getLongitude() + "";
            Log.e("onLocationResult lat", latitude);
            Log.e("onLocationResult Lon", longitude);
            //I need to send latitude and longitude value to jobService? 
            //how to do that?

        //tried using intent but didn't seem to work
            //Intent mIntent = new Intent();
            //mIntent.putExtra("lat", latitude);
            //mIntent.putExtra("lon", longitude);
        }
    }, null);
}
MyJobService类

public class MyJobService extends JobService {

    @Override
    public boolean onStartJob(JobParameters jobParameters) {
        //I need to get latitude and longitude value here from mainActivity 
        return true;
    }
}

您可以将这些数据存储在共享首选项中,当onStartJob()方法调用时,您可以从那里访问Lat long数据


您还可以根据最新位置的lat long值更新共享首选项值,并在服务运行时获取最新的lat long。

在构造JobInfo对象的地方,您可以使用setExtras()传递一个永久性的附加包

ComponentName componentName = new ComponentName(context, MyJobService.class);

PersistableBundle bundle = new PersistableBundle();
bundle.putLong("lat", lat);
bundle.putLong("lon", lon);

JobInfo jobInfo = new JobInfo.Builder(0, componentName)
        .setExtras(bundle)
        .build();
然后在JobService中,您可以使用

@Override
public boolean onStartJob(JobParameters params) {
    params.getExtras().getLong("lat");
    params.getExtras().getLong("lon");
}

请注意,
getBoolean()
方法仅可从API 22获得。如果需要布尔值,可以将
int
作为
0
1
传递并从中转换。如果需要支持低于21的API,请使用PersistableBundleCompat。类似对象的服务连接如何?