我正在尝试在AsyncTask
内部实现this之类的内容。
@Override
protected void onPreExecute() {
super.onPreExecute();
...
// prevent screen sleep
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
@Override
protected void onPostExecute(List<Result> results) {
super.onPostExecute(results);
getWindow().clearFlag (WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
...
}
但我在Android Studio中收到错误“Cannot resolve method getWindow()
”。我错过了什么?
更新
我的AsyncTask的构造函数是:
public MyTask(ProgressDialog pDlg) {
progressDlgReference = new WeakReference<>(pDlg);
progressDlg = progressDlgReference.get();
context = progressDlg.getContext();
...
}
我尝试将context
投射到Activity
但是((Activity) context).getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
出现了运行时错误?
答案 0 :(得分:4)
正如您所看到的,from the docs getWindow()
是Activity
的一种方法。而且,由于您不在Activity
,因此该方法不可用。
因此,您需要引用Activity
来识别此方法。
现在,我无法看到您的大部分代码,但您可以从Context
传递Activity
并将其转换为引用该方法。
所以你会pass the Context like this然后把它投到Activity
This SO answer应该给你一些帮助
答案 1 :(得分:2)
getWindow()
是您Activity
提供的方法。
您可以通过ff:
使用此功能AsyncTask
位于Activity
内/内。getActivity().getWindow()
答案 2 :(得分:0)
尝试:
yourActivity.this.getWindow().clearFlag (WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
这是一个可以帮助你更多的参考: link