1

我想使用奖励视频广告(Admob),但我想在视频广告加载时显示进度条
我已经尝试使用异步任务来完成它只是为了查看视频是否会加载但它不起作用

     @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();
            }
        }
    }

如果视频尚未加载,现在我想加载进度条
谢谢

4

3 回答 3

3

我是这样做的:

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

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;
    }
}

它的工作原理是,应用程序在loadRewaredVideoAd()创建活动/片段时通过调用函数尝试在后台加载广告。然后,当用户单击按钮时,showAd()会调用函数并发生以下两种情况之一:

  • 1) 如果广告加载成功,则显示广告。
  • 2)如果没有,它会loadRewardedVideoAd()再次调用并显示一个进度条。它也设置buttonClicked为真。然后,如果广告加载,onRewardedVideoAdLoaded()则调用该函数,该函数showAd()再次调用,这一次发生第一个选项。如果广告这次也没有加载,则onRewardedVideoAdFailedToLoad(int i)调用 then 并显示一个 toast 表示用户稍后再试。
于 2019-07-04T11:38:01.897 回答
0

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

于 2018-01-18T16:55:21.773 回答
0

我正在放置一个 admob 视频,该视频在您进入活动时执行。就我而言,我放置了一个可执行循环来在视频已经加载时启动它。

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();
}

我希望这可以帮助你。

于 2018-02-07T15:34:27.790 回答