AdMob的。在InterstitialAd显示时是否可以保持屏幕亮度?

时间:2015-07-30 11:25:32

标签: android unity3d admob

我在Unity3d上使用AdMob plugin Android游戏。虽然我可以在游戏过程中保持屏幕亮,但我无法在InterstitialAd显示期间控制手机行为 - 屏幕变暗并被锁定。

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

有没有人遇到过这个问题?

2 个答案:

答案 0 :(得分:2)

看起来我找到了解决方案。

简而言之:如果与标志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();
      }
    });

当然,应该在AndroidManifest中的某处定义<uses-permission android:name="android.permission.WAKE_LOCK" />

警告:在此代码中,如果应用程序转到后台,则不会释放唤醒锁,因此如果用户在广告显示时折叠了应用程序,则CPU仍然正常工作,屏幕将一直亮,直到应用程序为止完全关闭或将被打开,插页式广告将被关闭。

答案 1 :(得分:0)

尝试将此代码放入AndroidManifest.xml。

<uses-permission android:name="android.permission.WAKE_LOCK" />