gpt4 book ai didi

android - onSensorChanged 在 sleep 后约 5 分钟不工作,直到应用程序打开。

转载 作者:行者123 更新时间:2023-11-29 01:06:43 26 4
gpt4 key购买 nike

我遇到了一些奇怪的问题。我有一项接收传感器更新的服务。一切正常,直到屏幕关闭一段时间。在我从启动器打开应用程序之前,不会调用 onSensorChanged。

这是我的服务等级:

public class MyService extends Service implements OrientationMonitor.Listener, ScreenReceiver.ScreenStateListener {

private final OrientationMonitor orientationMonitor = new OrientationMonitor(this);
private final ScreenReceiver screenReceiver = new ScreenReceiver(this);

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return START_STICKY;
}

@Override
public void onCreate() {
super.onCreate();
orientationMonitor.start();
screenReceiver.register();
}

@Override
public void onDestroy() {
super.onDestroy();
orientationMonitor.stop();
screenReceiver.unregister();
}

@Override
public IBinder onBind(Intent intent) {
return null;
}

@Override
public void screenStateChanged(boolean isScreenOn) {
if (isScreenOn) {
orientationMonitor.start();
} else {
orientationMonitor.stop();
}
}
}

OrientationMonitor 的代码如下:

public class OrientationMonitor implements SensorEventListener {
private final Listener listener;
private final WindowManager windowManager;
private final SensorManager sensorManager;
private final Sensor rotationSensor;

public OrientationMonitor(@NonNull Listener listener) {
this.listener = listener;
windowManager = (WindowManager) AppContext.get().getSystemService(Context.WINDOW_SERVICE);
sensorManager = (SensorManager) AppContext.get().getSystemService(Context.SENSOR_SERVICE);
rotationSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ROTATION_VECTOR);
}

public void start() {
if (rotationSensor != null)
sensorManager.registerListener(this, rotationSensor, 10_000);
}


public void stop() {
if (rotationSensor != null)
sensorManager.unregisterListener(this, rotationSensor);
}

@Override
public void onSensorChanged(SensorEvent event) {
//Here some work is performed
}

@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {

}

public interface Listener {
void onOrientationChanged(int angle);
}
}

在工作期间,当应用程序最小化和屏幕关闭时,服务会收到通知并停止(注销)旋转传感器。当屏幕打开时,它会再次注册。如果我关闭屏幕一段时间,不超过 1-2 分钟,那么一切都很好,onSensorChanged 会正常触发。

但是当我打开屏幕 5 分钟或更长时间时,onSensorChanged 直到我打开应用程序才会触发,然后它会立即触发而无需任何调用。但是,在调试过程中,我看到 sensorManager.registerListener(this, rotationSensor, 10_000); 在屏幕打开时被调用。

我发现了很多关于 onSensorChanged 在 sleep 期间不工作的问题,但它有点不同。

已经尝试过部分唤醒锁并从另一个线程注册监听器,但没有帮助。

有没有人遇到过类似情况?期待您的建议,并在此先感谢您。

最佳答案

我没有找到这个问题的原因,但是找到了解决办法。正如我所说的

when I turn screen of for 5 mins or more the onSensorChanged doesn't fire until I open the app, then it fires immediately without any calls

因此,我创建了一个没有 UI 的空 Activity,我在唤醒后立即调用它并在 onCreate 中完成它。这样我就能够让 onSensorChanged 开始在我的服务中工作。

关于android - onSensorChanged 在 sleep 后约 5 分钟不工作,直到应用程序打开。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46476205/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com