使用传感器时,我正在检测运动以进行一些计算,为此我将传感器注册在Service
上。
sensorManager.registerListener(sensorListener, sensorManager.getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION), SensorManager.SENSOR_DELAY_NORMAL);
为此,我已经在使用带有通知的前台服务来使传感器保持活动状态。
下面是我在Service
类上使用的代码(通知优先级更高,可返回粘性)。
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
registerSensor();
Notification notification = new NotificationCompat.Builder(this, ServiceNotification.CHANNEL_1_ID)
.setSmallIcon(R.drawable.ic_stat_name)
.setPriority(NotificationCompat.PRIORITY_HIGH)
//.setCategory(NotificationCompat.CATEGORY_SERVICE)
//.setOngoing(true)
//.setAutoCancel(true)
//.setOnlyAlertOnce(true)
.setColor(getResources().getColor(R.color.colorPrimaryDark))
.setContentIntent(pendingIntent)
.build();
startForeground(13, notification);
return START_STICKY;
}
Android System不会杀死我的应用程序,它会整夜运行。但是直到我打开屏幕,传感器才响应。
试图收购Wakelock来解决我的问题。
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MService: WakeLock");
mWakeLock.acquire();
但是我不想这么长时间使用WakeLock
。
是否可以通过某种方式使电话的传感器长期处于活动状态,或者我的前台服务/通知有误? 但是,我对优先级较高的前台服务进行了很多研究。