2017-08-05 27 views
0

WebViewでAdMobアドインをトリガで実行しようとしていますが、そのメソッドにアクセスできません。メソッドを静的にするよう依頼していますが、そうすると変数にアクセスすることができません。displayAd()メソッドはどのように呼び出すことができますか?

MainActivity.java

public class MainActivity extends AppCompatActivity { 
    private InterstitialAd mInterstitialAd; 
    private WebView mWebView; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_MainActivity); 
      MobileAds.initialize(this, "ca-app-pub-XXXXXXXXXXXXXXXX~XXXXXXXXXX"); 
      mInterstitialAd = new InterstitialAd(this); 
      mInterstitialAd.setAdUnitId("ca-app-pub-XXXXXXXXXXXXXXXX/XXXXXXXXXX"); 
      mInterstitialAd.loadAd(new AdRequest.Builder().build()); 
      mWebView = (WebView) findViewById(R.id.MainActivity); 
      mWebView.addJavascriptInterface(new WebAppInterface(this), "android"); 
    } 

    public void displayAd() { 
      [Ad Code Here] 
    } 
} 

WebAppInterface.java

public class WebAppInterface { 
     Context mContext; 

     WebAppInterface(Context c) { 
      mContext = c; 
     } 

     @JavascriptInterface 
     public void ad() { 
      MainActivity.displayAd(); 
     } 
    } 

このコードは動作しません。どのように変更して動作させることができますか?

+0

のようにインタフェースする活動の参照を渡しますか?エラーメッセージを投稿し、投稿内のエラーメッセージの行番号を強調表示してください。 – tima

+0

@tima私のdisplayAd()関数は静的である必要があると言うので、プロジェクトを構築することさえできません。静的に変更すると、mInterstitialAd要素への参照が失われます。 – TheAndroidProgrammer

答えて

0

お試しください。

public class WebAppInterface { 
     MainActivity mainActivity; 

     WebAppInterface(MainActivity mainActivity) { 
      this.mainActivity= mainActivity; 
     } 

     @JavascriptInterface 
     public void ad() { 
      mainActivity.displayAd(); 
     } 
    } 

と、このコードが動作しないのはなぜ

mWebView.addJavascriptInterface(new WebAppInterface(MainActivity.this), "android"); 
+0

WebAppInterfaceファイルの "displayAd()"を解決できません。それは私がアプリを構築するのを妨げる。 – TheAndroidProgrammer

+0

@TheAndroidProgrammer更新された回答をお試しください。 Webappinterfaceファイルの 'MainActivity'に' Activity'を変更してください。 –

+0

これはうまくいきました。テスト用に置いたログテキストが表示されますが、広告は実際には開きません。 WebViewを読み込む前に広告が読み込まれるようにするリスナーがあるため、広告が正しく読み込まれていることがわかります。現在displayAd()に 'mInterstitialAd.show();'があり、mInterstitialAdはMainActivityのpublic変数です。また、Javascriptインタフェースファイルで 'mainActivity.mInterstitialAd.show()'を試しましたが、広告が開かれませんでした。任意のアイデアや私は新しい質問スレッドを開く必要がありますか? – TheAndroidProgrammer

関連する問題