为什么FLAG_KEEP_SCREEN_ON无法正常工作?

时间:2014-12-09 16:52:13

标签: android android-intent android-notifications android-notification-bar

我正在尝试让屏幕始终打开,而我的测试应用程序处于前台并且正在运行Ongoing Notification。 当应用程序处于恢复状态时,它可以正常工作,但是当我点击主页/中间按钮将应用程序置于暂停状态,同时在通知状态栏中显示正在进行的通知时,它无法正常工作。

为什么getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)无法在前台/暂停状态下工作?

MainActivity:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

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

    setContentView(R.layout.main);

    ...

    NotificationCompat.Builder OnGoingStatusBar = new NotificationCompat.Builder(this);
    OnGoingStatusBar.setSmallIcon(R.drawable.image);
    OnGoingStatusBar.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher));            
    OnGoingStatusBar.setTicker(Test);           
    OnGoingStatusBar.setContentTitle("Test");
    OnGoingStatusBar.setContentText("Testing Message");         
    OnGoingStatusBar.setWhen(System.currentTimeMillis());
    OnGoingStatusBar.setAutoCancel(false);
    OnGoingStatusBar.setContent(notificationView).build();
    OnGoingStatusBar.setOngoing(true);   //Create OnGoing Status Bar
    OnGoingStatusBar.setPriority(Notification.PRIORITY_MAX);
    NotificationManager.notify(STATUSBAR_ID, OnGoingStatusBar.build());
}

2 个答案:

答案 0 :(得分:1)

您应将getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)移到setContentView()下方,并将android:keepScreenOn="true"放入主要布局的根视图中。

有关此主题的文档可能很有用:https://developer.android.com/training/scheduling/wakelock.html#screen

答案 1 :(得分:1)

我已经在我的一个应用程序中完成了这项工作,它对我来说非常有用。

请正确执行这些步骤。

第1步:

 File "C:\Program Files\Anaconda3\lib\multiprocessing\pool.py", line 119, in worker
    result = (True, func(*args, **kwds))
  File "C:\Program Files\Anaconda3\lib\multiprocessing\pool.py", line 47, in starmapstar
    return list(itertools.starmap(args[0], args[1]))
  File "D:\PycharmProjects\IQA\paralle_test.py", line 109, in predict
    getvalue(file)
  File "D:\PycharmProjects\IQA\paralle_test.py", line 104, in getvalue
    print('no checkpoint found')
  File "C:\Program Files\Anaconda3\lib\site-packages\tensorflow\python\client\session.py", line 1208, in __exit__
    self._default_graph_context_manager.__exit__(exec_type, exec_value, exec_tb)
  File "C:\Program Files\Anaconda3\lib\contextlib.py", line 66, in __exit__
    next(self.gen)
  File "C:\Program Files\Anaconda3\lib\site-packages\tensorflow\python\framework\ops.py", line 3520, in get_controller
    if self.stack[-1] is not default:
IndexError: list index out of range
"""\tensor
flo

第2步: 现在你需要设置屏幕,

@Override
protected void onCreate(Bundle bundle) {
    super.onCreate(bundle);    
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}

您也可以将其添加到XML布局的根目录。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    View view = getLayoutInflater().inflate(R.layout.layout_activity, null);
    view.setKeepScreenOn(true);
    setContentView(view);
}

我按照这些步骤操作,似乎对我来说非常合适。