您好我正在编写程序,使用Alarmmanager每隔5分钟获取用户当前的经纬度并将值存储在共享偏好中。我想运行此搜索背景,因此我使用service.I想要获取后获取服务和经度,以避免电池耗尽。这是我的代码
CurrentLocation.java
import com.google.android.gms.maps.model.LatLng;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.IBinder;
import android.preference.PreferenceManager;
import android.util.Log;
import android.widget.Toast;
public class CurrentLocation extends Service implements LocationListener {
private Context mcontext;
SharedPreferences shprefs;
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
this.mcontext=this;
getlocation();
}
private void getlocation() {
// TODO Auto-generated method stub
Log.i("evvterer", "mnbj");
LocationManager locationManager = (LocationManager) mcontext.getSystemService(Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, this);
}
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
shprefs=PreferenceManager.getDefaultSharedPreferences(CurrentLocation.this);
double latitude=location.getLatitude();
Editor edit=shprefs.edit();
edit.putString("Ltd", ""+latitude);
edit.commit();
double longitude=location.getLongitude();
Editor edits=shprefs.edit();
edits.putString("Lngtd", ""+longitude);
edits.commit();
LatLng loca=new LatLng(latitude,longitude);
}
@Override
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
}
@Override
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub
}
}
请帮帮我 提前致谢
答案 0 :(得分:0)
使用广播接收器代替服务,因为广播接收器意图在您的条件满足时触发,因此使用广播每5分钟取出用户当前经度和经度。:)来自广播接收器,您的电池不会因为服务而降低很多
答案 1 :(得分:0)
当您使用onBind中的返回null时,您可能正在使用startService()来启动CurrentLocation服务。
因此,当您完成CurrentLocation服务后,请简单地调用stopService (Intent service)
但是如果你已经使用了bindService,那么你必须使用unBindService()。
要在准确的时间停止服务,您可以在onLocationChanged()结束时调用活动中的方法,然后从该方法停止服务。
或者向与您的活动相关联的处理程序发送消息以停止服务。
并添加您的代码以启动该服务,以便它可以帮助其他人回答您的问题。