Android 从服务调用startActivity不会';不允许关闭屏幕

Android 从服务调用startActivity不会';不允许关闭屏幕,android,android-activity,android-service,Android,Android Activity,Android Service,各位用户好 我正在尝试使用以下代码打开此条件下的新活动if(intent.getAction().equals(intent.ACTION\u SCREEN\u ON))(该服务具有广播接收器) 问题是,当新活动打开时,屏幕超时设置不再像以前那样工作,屏幕始终处于打开状态。活动中没有“保持屏幕打开”的标志。活动只有空的onCreate()方法。我想不出是什么问题。为什么屏幕超时(15秒)后屏幕不关闭?当我在没有此活动的情况下运行服务时,它会像往常一样禁用屏幕。对于Intent.ACTION\u

各位用户好

我正在尝试使用以下代码打开此条件下的新活动
if(intent.getAction().equals(intent.ACTION\u SCREEN\u ON))
(该服务具有广播接收器)


问题是,当新活动打开时,屏幕超时设置不再像以前那样工作,屏幕始终处于打开状态。活动中没有“保持屏幕打开”的标志。活动只有空的onCreate()方法。我想不出是什么问题。为什么屏幕超时(15秒)后屏幕不关闭?当我在没有此活动的情况下运行服务时,它会像往常一样禁用屏幕。

对于Intent.ACTION\u screen\u关闭和Intent.ACTION\u screen\u打开,您不能在Android清单中声明它们

可能是你犯了这个错误

检查此代码-

public class ScreenReceiver extends BroadcastReceiver {

    public static boolean wasScreenOn = true;

    @Override
    public void onReceive(final Context context, final Intent intent) {
        if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
            // do whatever you need to do here
            wasScreenOn = false;
        } else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
            // and do whatever you need to do here
            wasScreenOn = true;
        }
    }

}
而在活动中—

public class ExampleActivity extends Activity {

    private BroadcastReceiver mReceiver = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // initialize receiver
        final IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
        filter.addAction(Intent.ACTION_SCREEN_OFF);
        mReceiver = new ScreenReceiver();
        registerReceiver(mReceiver, filter);
        // your code
    }

    @Override
    protected void onPause() {
        // when the screen is about to turn off
        if (ScreenReceiver.wasScreenOn) {
            // this is the case when onPause() is called by the system due to a screen state change
            Log.e("MYAPP", "SCREEN TURNED OFF");
        } else {
            // this is when onPause() is called when the screen state has not changed
        }
        super.onPause();
    }

    @Override
    protected void onResume() {
        super.onResume();
        // only when screen turns on
        if (!ScreenReceiver.wasScreenOn) {
            // this is when onResume() is called due to a screen state change
            Log.e("MYAPP", "SCREEN TURNED ON");
        } else {
            // this is when onResume() is called when the screen state has not changed
        }
    }

    @Override
    protected void onDestroy() {
        if (mReceiver != null) {
            unregisterReceiver(mReceiver);
            mReceiver = null;
        }
        super.onDestroy();
    }

}
也许这可以解决你的问题


干杯:)

您正在检查哪一个android版本?android版本4.3(Galaxy S3和Nexus 4)除非您在其中一个视图的活动布局中执行其他操作,如持有电源锁或使用android:keepScreenOn=“true”,否则不应该这样做。没有任何类似于此android:keepScreenOn=“true”的属性。关于WakeLock,我甚至已经对这一部分进行了评论。但一旦它在KeyGuard(KeyGuard通过触摸屏禁用用户)后打开活动,超时时间就消失了。没有评论,释放唤醒锁也没有帮助。抱歉,我没有得到我不能声明的内容?这些是状态,只允许在活动运行时捕获它们。尝试从清单中删除它们,看看这是否对您有效。对不起,可能我写了一些不清楚的东西。在广播中捕获事件和事件的屏幕。您的答案告诉如何为该事件注册服务。就我而言,它是有效的。当服务运行后,我不会打开新的活动,屏幕超时工作正常。但一旦我从服务中启动触觉,它就不再工作了。
public class ExampleActivity extends Activity {

    private BroadcastReceiver mReceiver = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // initialize receiver
        final IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
        filter.addAction(Intent.ACTION_SCREEN_OFF);
        mReceiver = new ScreenReceiver();
        registerReceiver(mReceiver, filter);
        // your code
    }

    @Override
    protected void onPause() {
        // when the screen is about to turn off
        if (ScreenReceiver.wasScreenOn) {
            // this is the case when onPause() is called by the system due to a screen state change
            Log.e("MYAPP", "SCREEN TURNED OFF");
        } else {
            // this is when onPause() is called when the screen state has not changed
        }
        super.onPause();
    }

    @Override
    protected void onResume() {
        super.onResume();
        // only when screen turns on
        if (!ScreenReceiver.wasScreenOn) {
            // this is when onResume() is called due to a screen state change
            Log.e("MYAPP", "SCREEN TURNED ON");
        } else {
            // this is when onResume() is called when the screen state has not changed
        }
    }

    @Override
    protected void onDestroy() {
        if (mReceiver != null) {
            unregisterReceiver(mReceiver);
            mReceiver = null;
        }
        super.onDestroy();
    }

}