在屏幕关闭时做一些事情,但在应用程序进入后台时关闭

Do stuff while screen is off but turn off when app goes to background

我必须允许我的应用程序在用户关闭屏幕时执行某些操作,但当用户转到主屏幕(或其他应用程序)时我必须停止服务。

我尝试处理电源按钮,但没有用。 然后我像这样创建 ScreenReceiver:

@Override
public void onReceive(Context context, Intent intent) {
    if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
        wasScreenOn = false;
    } else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
        wasScreenOn = true;
    }
}

但它更改 wasScreenOn 值太晚了(在调用 onStop 方法之后)

@Override
protected void onStop() {
    super.onStop();
    Log.i(TAG, "onStop");
    if (powerButtonClicked)
        return;
    if (mBound) {
        mMediaService.onStop();
    }
}

电源按钮总是错误的...改变得太晚了

如何正确执行此操作?

好的,我找到了答案。 您需要做的就是声明 PowerManager

PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);

并在 onStop()

if (!powerManager.isScreenOn()) 
{
    // Screen is off
}