我是Android开发的新手,我正在创建一个包含广告的闹钟应用。在用户解除警报后,我想立即包含全屏广告的合理位置。
我遇到的问题是,当闹钟响起时,用户的锁定屏幕通常处于活动状态。我的活动和用户界面显示正常,因为我使用的是WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
标记,但当我拨打interstialAd.show()
时,会弹出锁定屏幕,广告隐藏在其背后。这是一个非常糟糕的用户体验,因为没有真正的迹象表明广告已经被加载,直到下一次他/她决定解锁他们的手机,此时它无处不在。
我的代码:
我在活动的onCreate()
方法中初始化广告:
if (BuildConfig.FLAVOR.equals("free")) {
mInterstitialAd = new InterstitialAd(this);
mInterstitialAd.setAdUnitId(getString(R.string.alarm_dismissed_interstitial_ad_id));
mInterstitialAd.setAdListener(new AdListener() {
@Override
public void onAdClosed() {
// ad closed or finished so we're done here.
Log.d(TAG, "onAdClosed: ad closed... finishing activity");
if (Build.VERSION.SDK_INT >= 21) {
finishAndRemoveTask();
} else finish();
}
});
if (!mAdLoadStarted) {
requestNewInterstitial();
}
}
requestNewInterstitial()
:
private void requestNewInterstitial(){
AdRequest adRequest = new AdRequest.Builder()
.addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
.build();
mInterstitialAd.loadAd(adRequest);
mAdLoadStarted = true;
}
一旦用户解除了警报,我就会调用show方法:
if (BuildConfig.FLAVOR.equals("free")) {
// The dismiss sequence has finished so we can display the full screen ad.
if (mInterstitialAd.isLoaded()) {
mInterstitialAd.show();
} else {
Log.d(TAG, "onDismissFinished: Ad wasn't displayed because it didn't load in time.");
}
}else{
// No ads for the paid version, we're done here
if (Build.VERSION.SDK_INT >= 21) {
finishAndRemoveTask();
} else finish();
}
答案 0 :(得分:1)
我猜我会interstialAd.show()
创建一个没有FLAG_SHOW_WHEN_LOCKED
的新窗口/活动。
您必须使用也设置了此标记的窗口或在向用户显示内容的同一窗口中显示广告。