2016-05-02 5 views
0

WebViewを使用してクライアント用のアンドロイドアプリを作成しています。 メディアを再生するクライアントのWebサイトにいくつかのリンクがあります。バッテリーを節約するために、ユーザーがウェブサイト内のこのメディアリンクをクリックすると、「FLAG_KEEP_SCREEN_ON」を呼び出そうとしています。私のwebviewは、Webview内のWebページの読み込みを処理するために、新しいMywebViewClient()を使用します。 MywebViewClientは実際にはshouldOverrideUrlLoading()をオーバーライドするプライベートクラスです。このメソッドは、ユーザーがメディアファイルを再生するリンクをクリックしたときを検出するので、「FLAG_KEEP_SCREEN_ON」を適用しようとしました。メディアファイルを再生するページでない場合は、「FLAG_KEEP_SCREEN_ON」をクリアします。 私が抱えている問題は、このメソッドはプライベートクラスの中にあるので、自分のアクティビティの参照を取得できないようです。おそらくコール:getWindow()。addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);このフラグを適用するウィンドウがわからない。私はおそらく何かマイナーなものだと確信していますが、私はこの内部クラスの内側からウィンドウをホストするアクティビティを取得しているようです。ここまでは私のコードです:Webview App内のプライベート内部クラス内の自分のアクティビティへの参照を取得できません

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; 
} 




} 
+0

outerclass.thisを試しましたか?ここで、outerclassはあなたのアクティビティ名で、 "this"はあなたにアクティビティインスタンスを与えます –

+0

私はそれを試すことができます。しかし、私は、私は、この呼び出しが動作するかどうかわからないgetWindow.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)の呼び出しをOuterClass.this.getWindow.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)に変更する必要があります。 @AnkitAggarwal –

答えて

0

ActivityインスタンスをとるMyWebViewClientにコンストラクタを追加してください。

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

MyWebViewClient

new MyWebViewClient(this); 

を作成しながら、あなたの内側のクラスは静的ではありません(ただし、静的な使用を検討した場合)アクティビティインスタンスを渡し、あなたはアクティビティインスタンスのための簡単な使用、YourActivityName.thisができました。

関連する問題