나는 아직도 해결책을 좋아하지 않지만이 문제를 해결하는 것을 생각해 냈습니다. 아무도 모른다면 더 우아한 접근을 환영 할 것입니다.
내가 한 것은 AdMob 대신 mMedia SDK를 사용하는 것입니다. Interstitial 및 AdView 클래스는 모두 생성자의 Activity가 아닌 Context를 취할 수 있습니다. 삽입 광고는 Dream 오버레이 뒤에 열리기 때문에 여전히 효과가 없습니다. 그래서 결국 DreamView의 XML 레이아웃에 AdView를 추가 한 다음 표시 할 때까지 View.GONE에 대한 가시성을 설정했습니다. 광고를 표시 할 때 View.VISIBLE로 설정했습니다.
내가 만난 다른 문제는 AdView를 클릭하면 광고의 목적을 무시하고 Dream의 뒤에서 열리는 광고의 URL로 브라우저를 시작한다는 것입니다. 그래서 나는 Dream를 interactive로 설정하고, onTouchEvent를 잡았고, click이 발생했을 때 Ad의 callOnClick 메소드를 호출하면 광고가 VISIBLE인지를 판단합니다. 또한 광고의 RequestListener를 내 Dream Service에 설정하고 광고가 브라우저를 시작할 때 호출되는 MMAdOverlayLaunched 메서드를 구현해야했습니다. 이 메소드에서 나는 Dream을 멈추고 브라우저에 광고를 표시하도록 finish()를 호출했습니다.
@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();
}
정상적으로 작동 했습니까? 금전적/기술적으로? 나는 이것이 배터리/UX에 좋지 않다고 생각했다. – you786