如何在不重新启动活动的情况下禁用保持屏幕

时间:2015-07-24 19:09:14

标签: android android-activity

我正在推出Android Activity并使用

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

保持屏幕开启。

后来,我用

清除了旗帜
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

但这并没有立即生效。 如果我暂停该应用并恢复该应用,则可以使用

所以这就是我设置标志和开始活动的方式。这是一个cordova phonegap应用程序。在SipAudioCall监听器onRinging事件中:

Activity activity = SIP.this.cordova.getActivity();
  if (activity instanceof MonmouthTelecom) {
    if (((MonmouthTelecom) activity).isActivityPaused()) {
      Intent notifIntent = new Intent(SIP.this.cordova.getActivity().getApplicationContext(),
             Class.forName(SIP.this.cordova.getActivity().getComponentName().getClassName()));
      notifIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
      Log.i(LOG_TAG, "opening app...");

      // set window flags here b4 starting activity...
      ((MonmouthTelecom) activity).setWindowFlags(
            WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON |
            WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD|
            WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED|
            WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
            SIP.this.cordova.getActivity().getApplicationContext().startActivity(notifIntent);
      }
}

在onCallEstablished事件处理程序上,我调用:

  ((MonmouthTelecom) activity).clearWindowFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

设置和清除窗口标志只是: (在定义活动时)

public void setWindowFlags(int flags) {
this.getWindow().addFlags(flags);
}
public void clearWindowFlags(int flags) {
this.getWindow().clearFlags(flags);
}

1 个答案:

答案 0 :(得分:1)

好的,我想出来了。显然我在不同的线程中操纵视图,并且使用cordova设置,没有输出异常。

SIP.this.cordova.getActivity().runOnUiThread(new Runnable() {...});下的runnable中调用add / clear标志 让它发挥作用。