我正在启动一个 Android Activity
并使用
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
保持屏幕亮着。
后来,我用
清除了标志getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
但这并没有立即生效。 如果我暂停并恢复该应用程序,它就会正常工作。
这就是我设置标志并开始 Activity 的方式。这是一个 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);
设置和清除窗口标志只是: (在定义 Activity 时)
public void setWindowFlags(int flags) {
this.getWindow().addFlags(flags);
}
public void clearWindowFlags(int flags) {
this.getWindow().clearFlags(flags);
}
最佳答案
好的,我想通了。显然我在不同的线程中操作 View 并且使用 cordova 设置,没有输出异常。
在 SIP.this.cordova.getActivity().runOnUiThread(new Runnable() {...});
下的 runnable 中调用添加/清除标志
开始工作了。
关于android - 如何在不重新启动 Activity 的情况下禁用保持屏幕打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31618056/