我正在寻找最佳实践来实现定期(每10-60秒)记录GPS或其他传感器值的服务。当手机进入睡眠状态时,该服务应该处理待机模式。Android:为GPS /传感器日志记录服务
任何帮助(伪代码或教程)非常感谢!
我正在寻找最佳实践来实现定期(每10-60秒)记录GPS或其他传感器值的服务。当手机进入睡眠状态时,该服务应该处理待机模式。Android:为GPS /传感器日志记录服务
任何帮助(伪代码或教程)非常感谢!
它看起来是不可能放过取向传感器不断地努力了几个小时,即使该设备可能睡着(指http://code.google.com/p/android/issues/detail?id=3708#makechanges
只要显示熄灭时,传感器会做的一致好评.. 。:(
我现在实现的激活锁定(需要许可)
<uses-permission android:name="android.permission.WAKE_LOCK" />
在具有计时器,并且将恢复正常显示再次上的broadcastreciever一起使用。当然,这是疯狂的电池寿命,但我迄今没有找到其他方式。
这是我在服务onCreate方法:
@Override
public void onCreate() {
mNM = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
CONTEXT = this;
PowerManager pm = (PowerManager) CONTEXT.getSystemService(Context.POWER_SERVICE);
this.mWakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "my tag");
mWakeLock.acquire();
Log.d(TAG, "Wakelock acquired");
// register receiver that handles screen on and screen off logic
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
BroadcastReceiver mReceiver = new ScreenReceiver();
registerReceiver(mReceiver, filter);
}
此服务的OnStart方法:
@Override
public void onStart(Intent intent, int startid) {
Toast.makeText(this, "My Service Started", Toast.LENGTH_SHORT).show();
Log.d(TAG, "onStart");
boolean screenOn = intent.getBooleanExtra("screen_state", false);
if (!screenOn) {
Log.d(TAG, "Screen is on");
} else {
Log.d(TAG, "Screen is off");
Timer timer = new Timer("DigitalClock");
timer.schedule(new TimerTask() {
@Override
public void run() {
Log.d(TAG,"Waiting 1 sec for switching the screen back on again...");
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
mWakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP,
"my tag");
mWakeLock.acquire();
}
}, 1000);
mWakeLock.acquire();
}
}
,这是广播接收器类:
public class ScreenReceiver extends BroadcastReceiver { private boolean screenOff; @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) { screenOff = true; } else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) { screenOff = false; } Intent i = new Intent(context, MyService.class); i.putExtra("screen_state", screenOff); context.startService(i); }
}
这种解决方法还可以通过USB从调试器插入UN设备(我首先遇到了问题)。
请让我知道你是否有更好的解决方案,或者如果2.3中有修复。感谢名单!
它仍然是唯一的方法吗?我的意思是,有没有更好的方法来持续监测android传感器? – Demiurg 2012-02-17 20:53:54