Не удается получить ссылку на мои действия внутри частного внутреннего класса в приложении Webview

Я создаю android-приложение для клиента с помощью WebView.
Есть некоторые ссылки на веб-сайте клиента, которые играют медиа. Для экономии заряда батареи, я пытаюсь вызвать «FLAG_KEEP_SCREEN_ON», когда пользователь нажимает на эту ссылку СМИ в веб-сайте. My webview использует новый MywebViewClient () для обработки загрузки веб-страниц внутри webview. MywebViewClient на самом деле является частным классом, который переопределяет shouldOverrideUrlLoading(). Поскольку этот метод определяет, когда пользователь нажимает на ссылку, которая воспроизводит медиа-файлы, я попытался применить «FLAG_KEEP_SCREEN_ON». Если не одна из страниц воспроизводит медиафайлы, я очищаю «FLAG_KEEP_SCREEN_ON».
Проблема, с которой я сталкиваюсь, заключается в том, что, поскольку этот метод находится внутри частного класса, я не могу получить ссылку на свою деятельность. Возможно вызов: getWindow ().addFlags (WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); не знает, к какому окну применить этот флаг. Я уверен, что это, вероятно, что-то незначительное, но я просто не могу, кажется, получить активность, которая размещает окна внутри этого внутреннего класса. Вот мой код до сих пор:

Webview w;
//inside onCreate
{

w.setWebViewClient(new WebViewClient());

}  

private class MyWebViewClient{

if (Uri.parse(url).getHost().equals("WebsitesHost")) {

        if(w.getUrl().equals("LinkThatPlaysMediaSound" && 
   !getWindow.hasFeature(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)){

    getWindow.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

}

if(!w.getUrl().equals("LinkThatPlaysMediaSound")
    getWindow.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

        return false;
    }


    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
    startActivity(intent);
    return true;
}




}

1 ответ

  1. Добавьте конструктор в MyWebViewClient, который принимает экземпляр Activity.

    private MyWebViewClient(Activity activity)
    {
        this.activity = activity;
    }
    

    Передайте экземпляр действия при создании MyWebViewClient

    new MyWebViewClient(this);
    

    Если ваш внутренний класс не статичен(но вы рассматриваете использование статического), вы можете просто использовать, YourActivityName.thisнапример, экземпляр activity.