gpt4 book ai didi

android - 在后台持续更新位置

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:01:39 24 4
gpt4 key购买 nike

我正在开发一个应用程序,它将从后台服务持续发送位置更新。我尝试了以下代码。

public class LocationService extends Service implements LocationListener,
GooglePlayServicesClient.ConnectionCallbacks,
GooglePlayServicesClient.OnConnectionFailedListener {
LocationRequest mLocationRequest;
LocationClient mLocationClient;
@Override
public void onCreate() {
//creating log file in mobile
appendLog(DateFormat.getDateTimeInstance().format(new Date()) + ": Service created:", com.example.locationservice.Constants.LOG_FILE);

mLocationRequest = LocationRequest.create();
mLocationRequest.setInterval(5*1000);
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
// mLocationRequest.setFastestInterval(5*1000);
mLocationClient = new LocationClient(getApplicationContext(), this,this);
mLocationClient.connect();

}
@Override
public void onStart(Intent intent, int startId) {
int start = Service.START_STICKY;
appendLog(DateFormat.getDateTimeInstance().format(new Date()) + ": Service Started:", com.example.locationservice.Constants.LOG_FILE);

}

@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
// TODO Auto-generated method stub
appendLog(DateFormat.getDateTimeInstance().format(new Date()) + ": Connection to client failed", com.example.locationservice.Constants.LOG_FILE);
this.stopSelf();

}

@Override
public void onConnected(Bundle arg0) {
// TODO Auto-generated method stub
Log.i("info", "Location Client is Connected");
appendLog(DateFormat.getDateTimeInstance().format(new Date()) + ": Location Client Connectd:", com.example.locationservice.Constants.LOG_FILE);
//checking for locaton enabled or not
if(Util.isLocationEnabled(getApplicationContext())){
//checking for internet available or not
if(Util.isInternetOn(getApplicationContext())){
mLocationClient.requestLocationUpdates(mLocationRequest, this);
}else{
Log.i("info", "Internet not available");
appendLog(DateFormat.getDateTimeInstance().format(new Date()) + ": Internet not available", com.example.locationservice.Constants.LOG_FILE);
this.stopSelf();
}
}else{
Log.i("info", "Location Acess disabled");
appendLog(DateFormat.getDateTimeInstance().format(new Date()) + ": Location Acess disabled", com.example.locationservice.Constants.LOG_FILE);
this.stopSelf();
}
Log.i("info", "Service Connect status :: " + isServicesConnected());

}

@Override
public void onDisconnected() {
// TODO Auto-generated method stub
appendLog(DateFormat.getDateTimeInstance().format(new Date()) + ": Location Client DisConnectd:", com.example.locationservice.Constants.LOG_FILE);
Log.i("info", "Location Client is DisConnected");

}

@Override
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
double latitude = location.getLatitude();
double longitude = location.getLongitude();
appendLog(DateFormat.getDateTimeInstance().format(new Date()) + ": Location Changed:", com.example.locationservice.Constants.LOG_FILE);
Log.i("info", "Latitude :: " + latitude);
Log.i("info", "Longitude :: " + longitude);
if(Util.isInternetOn(getApplicationContext())){
//sending location details
sendLocation(location);
}else{
this.stopSelf();
Log.i("info", "Internet not available");
appendLog(DateFormat.getDateTimeInstance().format(new Date()) + ": Internet not available", com.example.locationservice.Constants.LOG_FILE);
}
}

@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
Log.i("info", "Service is destroyed");
mLocationClient.removeLocationUpdates(this);
appendLog(DateFormat.getDateTimeInstance().format(new Date()) + ": Service Destroyed:", com.example.locationservice.Constants.LOG_FILE);
super.onDestroy();
}
private boolean isServicesConnected() {
// Check that Google Play services is available
int resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(LocationService.this);
// If Google Play services is available
if (ConnectionResult.SUCCESS == resultCode) {
return true;
} else {
return false;
}
}
}

onLocationChanged 仅在我打开内置 map 应用程序时调用。否则它不会更新位置详细信息。我从使用警报服务的 Activity 开始这项服务。 alarmManager 每分钟触发一次。谁能告诉我为什么 onLocationChanged 没有连续调用。

提前致谢。

最佳答案

试试这个:

@Override
public void onCreate() {
//creating log file in mobile
appendLog(DateFormat.getDateTimeInstance().format(new Date()) + ": Service created:", com.example.locationservice.Constants.LOG_FILE);

mLocationClient = new LocationClient(getApplicationContext(), this,this);
}

将您的 onStart 替换为:

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
mLocationClient.connect();
}

和:

@Override
public void onConnected(Bundle arg0) {
mLocationRequest = LocationRequest.create();
mLocationRequest.setInterval(5*1000);
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
mLocationClient.requestLocationUpdates(mLocationRequest, this);
}

调用您的服务:

startService(yourServiceIntent);

你也可以查看我的代码here

关于android - 在后台持续更新位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21726670/

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