我正在创建一个简单的stepcounter应用程序,但后台服务似乎无法正常工作。
在我的Activity课程中,我开始使用我的服务:
...
Intent service = new Intent(this, MyService.class);
startService(service);
在我的服务类中,我这样做:
...
Notification notification = new Notification();
startForeground(42, notification);
db = new SQLiteHelper(getApplicationContext());
sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
eventListener = new EventListener(db);
//register listener for sensors
sensorManager.registerListener(eventListener, sensorManager.getDefaultSensor(Sensor.TYPE_STEP_DETECTOR), SensorManager.SENSOR_DELAY_FASTEST);
在Listener类的onSensorChangedMethod()我做:
...
if (sensor.getType() == Sensor.TYPE_STEP_DETECTOR) {
Log.d(TAG,new Date() + " " + event.values[0]);
db.insertStep(new Date().getTime(), 1);
}
manifest.xml中的服务配置:
...
<service
android:name=".MyService"
android:stopWithTask="false"
android:enabled="true"
android:exported="false"
>
即使我在前台跑步,步骤计数器似乎也会在几步之后停止。我手动测试并与Samsung Healths计步器进行比较,这与我计算的手动步骤是正确的,而我的应用程序在20-40步后停止,而在实际中我走了200步。(我关闭屏幕并从我的应用程序中取出最近的应用程序,仍然在前台。
我是否以某种方式错误地配置了服务?当我打开屏幕并打开屏幕并处于调试模式时,该应用程序正常工作(关闭屏幕并从最近的应用程序中删除应用程序)。但是,当我移除USB并尝试它时,不是这样。
我希望该服务能够永久运行,并且我希望利用从最近的应用程序移除应用程序时所采取的每一步,当屏幕关闭时等。任何帮助?
感谢。
编辑:只是读取用于长时间运行任务的服务应该使用服务中的线程。它是否正确?我可以看一个使用这种方法的例子。