【发布时间】:2015-02-05 13:44:54
【问题描述】:
我对服务的行为有点困惑。我创建了一个服务类,只要我的设备的纬度和经度发生变化,就会通过电子邮件发送我的位置。当我的手机屏幕显示时,服务运行良好已打开,但一旦手机屏幕关闭,该服务就不会更新我的新位置。我在 SO 上的某处读过关于唤醒锁定的内容。我不知道如何在我的服务上实现唤醒锁定,甚至我不知道不知道它是否会起作用。请指导我如何在我的服务类上获取唤醒锁 我的服务类的代码:
public class LocationUpdater extends Service {
private LocationManager lm;
private LocationListener locationListener;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Toast.makeText(getApplicationContext(), "Location updater started",Toast.LENGTH_LONG).show();
locationListener = new MyLocationListener();
lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
if (!lm.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0,0,
locationListener);
} else {
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER,0, 0,
locationListener);
lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,0, 0,
locationListener);
}
return START_STICKY;
}
@Override
public void onDestroy() {
lm.removeUpdates(locationListener);
super.onDestroy();
}
@Override
public void onCreate() {
Toast.maketext(getApplicationContext,"Updater Serive Created",Toast.LENGTH_LONG).show;
}
private class MyLocationListener implements LocationListener {
@Override
public void onLocationChanged(Location loc) {
if (loc != null) {
String latitude=loc.getLatitude();
Striing longitude=loc.getLongitude();
emailMyLocation(latitude,longitude);
}
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onProviderDisabled(String provider) {
}
}
}
这是将我的设备位置更新到我的电子邮件的服务类。请告诉我如何使它工作,即使屏幕关闭。
【问题讨论】:
-
尽量让你的服务实现
WAKE_LOCK权限。
标签: android android-service android-wake-lock