android - AdMob。插屏广告播放时能否保持屏幕常亮?

标签 android unity-game-engine admob

我正在使用AdMob plugin适用于 Unity3d 上的 Android 游戏。虽然我可以在游戏期间保持屏幕明亮,但在插页式广告显示期间我无法控制手机行为 - 屏幕变暗并被锁定。

我尝试修改 Interstitial.java 类以设置 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();
  }
});

有人遇到过这个问题吗?

最佳答案

看来我找到了解决方案。

简而言之:如果与标志 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 仍在工作,屏幕将一直亮起,直到应用程序关闭。完全关闭或将打开并且插页式广告将被关闭。

关于android - AdMob。插屏广告播放时能否保持屏幕常亮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31722501/

相关文章:

android - 如何给 fragment 一个对话框的外观?

android:windowSoftInputMode ="adjustPan"不工作

node.js - 如何从unity连接NodeJS数据库?

android - 在插件中使用 AAssetManager_fromJava 不直接从 Java VM 调用(从 Unity 调用)

c# - 检测 ActiveSelf 的事件

android - 无法加载admob原生广告

ios - 在 iOS 应用程序中添加 Admob 时构建错误

android - AdMob推广中DisplayUrl要放什么?

android - React Native 在 Apple 中显示文本两次,在 Android 中显示一次

java - 根据选择 ArrayIndexOutOfBoundsException 填充 Spinner