加载奖励视频广告时显示进度条

Show a progress Bar when Rewarded video Ads is loading

我想使用奖励视频广告 (Admob),但我想在加载视频广告时显示进度条
我已经尝试使用 async task 来完成它只是为了看看视频是否会加载但它没有工作

     @SuppressLint("StaticFieldLeak")
    public class videoAd extends AsyncTask<Void, Void, Void> {

        @Override
        protected void doInBackground(Void... voids) {

            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    mRewardedVideoAd.loadAd("ca-app-pub-3940256099942544/5224354917", new AdRequest.Builder().build());
                }
            });
        }

        @Override
        protected void onPostExecute(Integer integer) {
            super.onPostExecute(integer);
            if (mRewardedVideoAd.isLoaded()){

                Toast.makeText(SetFullWallpaper.this, "Video loaded", Toast.LENGTH_SHORT).show();
                mRewardedVideoAd.show();
            }
        }
    }

现在我想在视频尚未加载时加载一个进度条
谢谢

在扩展 AsyncTask 的 class 中添加 OnProgressUpdate() 并在此添加进度对话框。

我正在放置一个 admob 视频,当您输入 activity 时执行。在我的例子中,我放置了一个可执行循环来在视频已经加载时启动它。

if (mRewardedVideoAd.isLoaded()) {
        mRewardedVideoAd.show();
    }else{
        loadRewardedVideoAd();
    }

这是我所有代码的一部分

private boolean started = false;
private Handler handler = new Handler();

private void initializeAdMob() {
    mRewardedVideoAd = MobileAds.getRewardedVideoAdInstance(this);
    mRewardedVideoAd.setRewardedVideoAdListener(this);
    loadRewardedVideoAd();
}

private void loadRewardedVideoAd() {
    if (!mRewardedVideoAd.isLoaded()) {
        mRewardedVideoAd.loadAd(getString(R.string.id_block_activity), new AdRequest.Builder().build());
    }
}

private void showRewardedVideoAd() {
    if (BaseInteractor.isNetworkAvailable(this)) {
        showProgressBar(true);
        start();
    }
}

private Runnable runnable = new Runnable() {
    @Override
    public void run() {
        if (mRewardedVideoAd.isLoaded()) {
            mRewardedVideoAd.show();
        }else{
            loadRewardedVideoAd();
        }
        if (started) {
            start();
        }
    }
};

public void stop() {
    started = false;
    handler.removeCallbacks(runnable);
}

public void start() {
    started = true;
    handler.postDelayed(runnable, 2000);
}

我终于在

中停止了可运行程序
@Override
public void onRewardedVideoAdOpened() {
    showProgressBar(false);
    stop();
}

希望对您有所帮助。

我是这样做的:

我有一个按钮,点击它会显示广告,所以我有一个布尔变量来跟踪按钮是否被点击:

boolean buttonClicked = false

这些行在我的 onCreate 函数中:

    mRewardedVideoAd = MobileAds.getRewardedVideoAdInstance(getContext());
    rewardedVideoAdListener = new RewardedVideoAdListener() {
        @Override
        public void onRewardedVideoAdLoaded() {
            if(buttonClicked) {
                showAd();
            }
        }

        @Override
        public void onRewardedVideoAdOpened() {

        }

        @Override
        public void onRewardedVideoStarted() {

        }

        @Override
        public void onRewardedVideoAdClosed() {
            loadRewardedVideoAd();
        }

        @Override
        public void onRewarded(RewardItem rewardItem) {

        }

        @Override
        public void onRewardedVideoAdLeftApplication() {

        }

        @Override
        public void onRewardedVideoAdFailedToLoad(int i) {
            if(buttonClicked) {
                progressBar.setVisibility(View.INVISIBLE);
                Toast toast = Toast.makeText(getContext(), "Please try again later", Toast.LENGTH_SHORT);
                toast.show();
            }
        }

        @Override
        public void onRewardedVideoCompleted() {

        }
    };

    mRewardedVideoAd.setRewardedVideoAdListener(rewardedVideoAdListener);

    loadRewardedVideoAd();

    pointsButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                showAd();
            }
        });

这是我的 showAd 函数:

public void showAd(){
    if (mRewardedVideoAd.isLoaded()) {
        progressBar.setVisibility(View.GONE);
        mRewardedVideoAd.show();
        buttonClicked = false;
    } else {
        loadRewardedVideoAd();
        progressBar.setVisibility(View.VISIBLE);
        buttonClicked = true;
    }
}

这是如何工作的,当创建 activity/fragment 时,应用会尝试通过调用 loadRewaredVideoAd() 函数在后台加载广告。然后当用户点击按钮时,showAd() 函数被调用并且发生以下两种情况之一:

  • 1) 如果广告加载成功,则显示该广告。
  • 2) 如果没有,它会再次调用 loadRewardedVideoAd() 并显示一个进度条。它还将 buttonClicked 设置为 true。然后,如果广告加载,将调用 onRewardedVideoAdLoaded() 函数,该函数会再次调用 showAd(),这次会出现第一个选项。 如果这次广告也没有加载,则会调用 onRewardedVideoAdFailedToLoad(int i) 并显示祝酒词,提示用户稍后再试。