AdMob。是否可以在 InterstitialAd 显示时保持屏幕明亮?
AdMob. Is it possible to keep screen bright while InterstitialAd is showing?
我在 Unity3d 上使用 AdMob plugin 进行 Android 游戏。虽然我可以在游戏会话期间保持屏幕明亮,但我无法控制 phone 在 InterstitialAd 显示期间的行为 - 屏幕变暗并被锁定。
我尝试修改 Interstitial.java class 以设置 FLAG_KEEP_SCREEN_ON 或为 activity 设置 WAKELOCK 但什么也没得到。
interstitial = new InterstitialAd(activity);
interstitial.setAdUnitId(adUnitId);
interstitial.setAdListener(new AdListener() {
...
@Override
public void onAdOpened() {
// this not worked!
PowerManager powerManager = (PowerManager) activity.getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wakeLock = powerManager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "My Tag");
wakeLock.acquire();
// this not worked too
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
adListener.onAdOpened();
}
});
有人遇到过这个问题吗?
尝试将此代码放入 AndroidManifest.xml。
<uses-permission android:name="android.permission.WAKE_LOCK" />
看来我找到了解决方案。
简而言之:如果与标志 PowerManager.ON_AFTER_RELEASE | PowerManager.ACQUIRE_CAUSES_WAKEUP
一起使用,WAKE_LOCK 是有效的。没有它们屏幕会进入休眠状态。
完整代码:
PowerManager powerManager = (PowerManager) activity.getSystemService(Context.POWER_SERVICE);
wakeLock = powerManager.newWakeLock(
PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE | PowerManager.ACQUIRE_CAUSES_WAKEUP,
"com.google.unity.ads.Interstitial"
);
InterstitialAd interstitial = new InterstitialAd(activity);
interstitial.setAdUnitId(adUnitId);
interstitial.setAdListener(new AdListener() {
@Override
public void onAdLoaded() {
isLoaded = true;
adListener.onAdLoaded();
}
@Override
public void onAdFailedToLoad(int errorCode) {
adListener.onAdFailedToLoad(PluginUtils.getErrorReason(errorCode));
}
@Override
public void onAdOpened() {
wakeLock.acquire();
adListener.onAdOpened();
}
@Override
public void onAdClosed() {
adListener.onAdClosed();
wakeLock.release();
}
@Override
public void onAdLeftApplication() {
adListener.onAdLeftApplication();
}
});
当然,<uses-permission android:name="android.permission.WAKE_LOCK" />
应该在AndroidManifest的某处定义。
警告:在此代码中,如果应用程序进入后台,则不会释放唤醒锁,因此如果用户在广告显示时折叠应用程序,CPU仍然可以工作并显示屏幕会一直亮,直到应用程序完全关闭或将打开并关闭插页式广告。
我在 Unity3d 上使用 AdMob plugin 进行 Android 游戏。虽然我可以在游戏会话期间保持屏幕明亮,但我无法控制 phone 在 InterstitialAd 显示期间的行为 - 屏幕变暗并被锁定。
我尝试修改 Interstitial.java class 以设置 FLAG_KEEP_SCREEN_ON 或为 activity 设置 WAKELOCK 但什么也没得到。
interstitial = new InterstitialAd(activity);
interstitial.setAdUnitId(adUnitId);
interstitial.setAdListener(new AdListener() {
...
@Override
public void onAdOpened() {
// this not worked!
PowerManager powerManager = (PowerManager) activity.getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wakeLock = powerManager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "My Tag");
wakeLock.acquire();
// this not worked too
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
adListener.onAdOpened();
}
});
有人遇到过这个问题吗?
尝试将此代码放入 AndroidManifest.xml。
<uses-permission android:name="android.permission.WAKE_LOCK" />
看来我找到了解决方案。
简而言之:如果与标志 PowerManager.ON_AFTER_RELEASE | PowerManager.ACQUIRE_CAUSES_WAKEUP
一起使用,WAKE_LOCK 是有效的。没有它们屏幕会进入休眠状态。
完整代码:
PowerManager powerManager = (PowerManager) activity.getSystemService(Context.POWER_SERVICE);
wakeLock = powerManager.newWakeLock(
PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE | PowerManager.ACQUIRE_CAUSES_WAKEUP,
"com.google.unity.ads.Interstitial"
);
InterstitialAd interstitial = new InterstitialAd(activity);
interstitial.setAdUnitId(adUnitId);
interstitial.setAdListener(new AdListener() {
@Override
public void onAdLoaded() {
isLoaded = true;
adListener.onAdLoaded();
}
@Override
public void onAdFailedToLoad(int errorCode) {
adListener.onAdFailedToLoad(PluginUtils.getErrorReason(errorCode));
}
@Override
public void onAdOpened() {
wakeLock.acquire();
adListener.onAdOpened();
}
@Override
public void onAdClosed() {
adListener.onAdClosed();
wakeLock.release();
}
@Override
public void onAdLeftApplication() {
adListener.onAdLeftApplication();
}
});
当然,<uses-permission android:name="android.permission.WAKE_LOCK" />
应该在AndroidManifest的某处定义。
警告:在此代码中,如果应用程序进入后台,则不会释放唤醒锁,因此如果用户在广告显示时折叠应用程序,CPU仍然可以工作并显示屏幕会一直亮,直到应用程序完全关闭或将打开并关闭插页式广告。