0

Android Advertising SDK のいずれかが新しい DreamService 機能で動作するかどうか知っている人はいますか? AdMob を使ってみたところ、最初に Interstitial クラスのコンストラクターが Activity を明示的に必要としていることがわかりました。AdView にはコンテキストを必要とするコンストラクターがあるので試してみましたが、Activity 以外の Context を使用して AdView を膨張させようとしているという問題があることを示す実行時例外が発生しました。Amazon Mobile Ads API を試してみましたが、AdMob のものと同じようです。

創造性を発揮して、インタースティシャル広告を作成する DreamService から別のアクティビティを開始しようとしましたが、DreamService UI の背後で作成されました (Daydream がすべてをオーバーレイするので、これは理にかなっています)。Daydream で Ads を使用するための解決策を知っている人はいますか?

4

1 に答える 1

2

私はまだ解決策があまり好きではありませんが、この問題を解決する何かを思いつきました。誰かがそれを知っていれば、よりエレガントなアプローチを歓迎します。

私がしたことは、AdMob の代わりに mMedia SDK を使用することでした。Interstitial クラスと AdView クラスはどちらも、コンストラクターで Activity ではなく Context を取ることができます。インタースティシャルは、Dream オーバーレイの後ろで開くため、まだうまくいきませんでした。最終的に、Dream の XML レイアウトに AdView を追加し、それを表示したくなるまでその可視性を View.GONE に設定しました。広告を表示するときは、View.VISIBLE に設定します。

私が遭遇したもう 1 つの問題は、AdView をクリックした後、広告の URL を使用してブラウザーを起動することです。これはもちろん、Dream の背後で開き、広告を表示する目的を無効にします。そのため、Dream をインタラクティブに設定し、onTouchEvent をキャッチしました。クリックが発生したときに Ad が VISIBLE の場合は、Ad の callOnClick メソッドを呼び出します。また、Ad の RequestListener を Dream Service に設定し、MMAdOverlayLaunched メソッドを実装する必要がありました。このメソッドは、Ad がブラウザーを起動したときに呼び出されます。このメソッドでは、finish() を呼び出して Dream を停止し、ブラウザに Ad を表示させました。

@Override
public void onAttachedToWindow() {
    super.onAttachedToWindow();
    // Exit dream upon user touch
    setInteractive(true);
    // Hide system UI
    setFullscreen(true);
    // Set the dream layout
    setContentView(R.layout.dream_layout);
    //Initialize Ads
    this.initAdvertising();
}

private void initAdvertising(){
     MMSDK.initialize(this);
     mDreamAd = (MMAdView) findViewById(R.id.adView);
     //Separate thread will handle showing the ad
     mDreamAd.setVisibility(View.GONE);
     mAdRequest = new MMRequest();
     //TODO add metadata to Request
     mDreamAd.setMMRequest(mAdRequest);
     mDreamAd.setListener(this);
     mDreamAd.getAd();
}

@Override
public boolean dispatchTouchEvent(MotionEvent event){
    super.dispatchTouchEvent(event);
    if(mDreamAd != null && mDreamAd.isShown()){
        mDreamAd.callOnClick();
    }
    return true;
}

@Override
public void MMAdOverlayLaunched(MMAd ad) {
    //Finish so we can display the ad the user has clicked
    if(ad.equals(this.mDreamAd))
        this.finish();

}
于 2013-07-21T13:55:22.127 に答える