getWindow()无法在AsyncTask

时间:2016-03-29 03:20:50

标签: android android-studio android-asynctask

我正在尝试在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);出现了运行时错误?

3 个答案:

答案 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