package com.ysvideo.zhibo.app.ui.ad;
|
|
import android.content.Context;
|
import android.net.ConnectivityManager;
|
import android.net.NetworkInfo;
|
import android.os.Bundle;
|
import android.util.Log;
|
import android.view.LayoutInflater;
|
import android.view.View;
|
import android.view.ViewGroup;
|
import android.widget.ImageView;
|
import android.widget.ProgressBar;
|
import android.widget.TextView;
|
|
import com.qq.e.ads.cfg.VideoOption;
|
import com.qq.e.ads.nativ.MediaView;
|
import com.qq.e.ads.nativ.NativeADEventListener;
|
import com.qq.e.ads.nativ.NativeADMediaListener;
|
import com.qq.e.ads.nativ.NativeADUnifiedListener;
|
import com.qq.e.ads.nativ.NativeUnifiedAD;
|
import com.qq.e.ads.nativ.NativeUnifiedADData;
|
import com.qq.e.ads.nativ.VideoPreloadListener;
|
import com.qq.e.ads.nativ.widget.NativeAdContainer;
|
import com.qq.e.comm.constants.AdPatternType;
|
import com.qq.e.comm.util.AdError;
|
import com.ysvideo.zhibo.app.R;
|
import com.ysvideo.zhibo.app.entity.ad.AdPositionEnum;
|
import com.ysvideo.zhibo.app.util.ad.GDTConstant;
|
import com.ysvideo.zhibo.library_ad.AdUtil;
|
|
import java.util.ArrayList;
|
import java.util.Calendar;
|
import java.util.List;
|
|
import androidx.annotation.NonNull;
|
import androidx.annotation.Nullable;
|
import androidx.fragment.app.Fragment;
|
|
public class VideoDetailVideoAdFragment extends Fragment implements View.OnClickListener {
|
|
private MediaView mediaView;
|
|
private NativeAdContainer mContainer;
|
|
private NativeUnifiedADData mAdData;
|
|
private TextView tv_skip;
|
|
private ProgressBar pb_progress;
|
|
@Override
|
public void onCreate(@Nullable Bundle savedInstanceState) {
|
super.onCreate(savedInstanceState);
|
}
|
|
private ImageView img_poster;
|
|
private void initView(View root) {
|
mediaView = root.findViewById(R.id.gdt_media_view);
|
mContainer = root.findViewById(R.id.native_ad_container);
|
img_poster = root.findViewById(R.id.img_poster);
|
tv_skip = root.findViewById(R.id.tv_skip);
|
pb_progress = root.findViewById(R.id.pb_progress);
|
}
|
|
@Nullable
|
@Override
|
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
View root = LayoutInflater.from(getContext()).inflate(R.layout.item_video_detail_ad, null);
|
initView(root);
|
tv_skip.setOnClickListener(this);
|
return root;
|
}
|
|
|
private Runnable timer = null;
|
|
private synchronized void autoTimer(final View view) {
|
|
if (timer == null) {
|
timer = new Runnable() {
|
@Override
|
public void run() {
|
if (remainTime - (mAdData.getVideoCurrentPosition() / 1000) > 0) {
|
tv_skip.setText((remainTime - (mAdData.getVideoCurrentPosition() / 1000)) + "s后可跳过");
|
tv_skip.setClickable(false);
|
} else {
|
tv_skip.setText("跳过");
|
tv_skip.setClickable(true);
|
}
|
autoTimer(view);
|
}
|
};
|
view.postDelayed(timer, 1000);
|
} else {
|
view.removeCallbacks(timer);
|
view.postDelayed(timer, 1000);
|
}
|
}
|
|
|
int remainTime = 0;
|
|
Runnable playErrorRunnable = null;
|
|
public void loadVideoAD(final IVideoAdListener videoAdListener) {
|
tv_skip.setVisibility(View.GONE);
|
if (mAdData != null)
|
mAdData.destroy();
|
pb_progress.setVisibility(View.VISIBLE);
|
String pid = GDTConstant.PID_VIDEO_DETAIL_PLAYER;
|
NativeUnifiedAD mAdManager = new NativeUnifiedAD(getContext(), pid, new NativeADUnifiedListener() {
|
|
@Override
|
public void onNoAD(AdError adError) {//没有广告
|
System.out.println(adError);
|
pb_progress.setVisibility(View.GONE);
|
if (videoAdListener != null) {
|
videoAdListener.finishPlay();
|
}
|
}
|
|
@Override
|
public void onADLoaded(List<NativeUnifiedADData> list) {
|
System.out.println(list);
|
final NativeUnifiedADData ad = list.get(0);
|
//填充内容
|
mAdData = ad;
|
List<View> clickableViews = new ArrayList<>();
|
|
ad.bindAdToView(getContext(), mContainer, null, clickableViews);
|
if (ad.getAdPatternType() == AdPatternType.NATIVE_VIDEO) {
|
Log.d("gdt_ad_mob", "视频广告");
|
|
if (playErrorRunnable == null)
|
playErrorRunnable = new Runnable() {
|
@Override
|
public void run() {
|
if (pb_progress.getVisibility() == View.VISIBLE) {
|
mAdData.destroy();
|
if (videoAdListener != null) {
|
videoAdListener.finishPlay();
|
}
|
}
|
}
|
};
|
//4秒内视频还没加载完成的话就跳过
|
tv_skip.removeCallbacks(playErrorRunnable);
|
tv_skip.postDelayed(playErrorRunnable, 4000);
|
|
final String TAG = "NativeUnifiedADData";
|
// 如果是视频广告,可以调用preloadVideo预加载视频素材
|
ad.preloadVideo(new VideoPreloadListener() {
|
@Override
|
public void onVideoCached() {
|
Log.d(TAG, "onVideoCached");
|
//展示广告
|
VideoOption videoOption = getVideoOption();
|
ad.bindMediaView(mediaView, videoOption, new NativeADMediaListener() {
|
@Override
|
public void onVideoInit() {
|
Log.d(TAG, "onVideoInit: ");
|
|
}
|
|
@Override
|
public void onVideoLoading() {
|
Log.d(TAG, "onVideoLoading: ");
|
}
|
|
@Override
|
public void onVideoReady() {
|
Log.d(TAG, "onVideoReady");
|
img_poster.setVisibility(View.GONE);
|
pb_progress.setVisibility(View.GONE);
|
}
|
|
@Override
|
public void onVideoLoaded(int videoDuration) {
|
Log.d(TAG, "onVideoLoaded: ");
|
|
}
|
|
@Override
|
public void onVideoStart() {
|
Log.d(TAG, "onVideoStart");
|
if (ad.getVideoDuration() / 1000 > 5)
|
remainTime = 5;
|
else
|
remainTime = ad.getVideoDuration() / 1000;
|
|
videoAdListener.startPlay();
|
autoTimer(img_poster);
|
img_poster.post(new Runnable() {
|
@Override
|
public void run() {
|
tv_skip.setVisibility(View.VISIBLE);
|
}
|
});
|
|
}
|
|
@Override
|
public void onVideoPause() {
|
Log.d(TAG, "onVideoPause: ");
|
}
|
|
@Override
|
public void onVideoResume() {
|
Log.d(TAG, "onVideoResume: ");
|
}
|
|
@Override
|
public void onVideoCompleted() {
|
Log.d(TAG, "onVideoCompleted: ");
|
tv_skip.setVisibility(View.GONE);
|
if (videoAdListener != null) {
|
videoAdListener.finishPlay();
|
}
|
}
|
|
@Override
|
public void onVideoError(AdError error) {
|
Log.d(TAG, "onVideoError: ");
|
if (videoAdListener != null) {
|
videoAdListener.finishPlay();
|
}
|
}
|
|
@Override
|
public void onVideoStop() {
|
Log.d(TAG, "onVideoStop");
|
}
|
|
@Override
|
public void onVideoClicked() {
|
Log.d(TAG, "onVideoClicked");
|
}
|
});
|
ad.setNativeAdEventListener(new NativeADEventListener() {
|
@Override
|
public void onADExposed() {
|
Log.d(TAG, "onADExposed");
|
}
|
|
@Override
|
public void onADClicked() {
|
Log.d(TAG, "onADClicked");
|
}
|
|
@Override
|
public void onADError(AdError adError) {
|
Log.d(TAG, "onADError");
|
}
|
|
@Override
|
public void onADStatusChanged() {
|
Log.d(TAG, "onADStatusChanged");
|
}
|
});
|
ad.startVideo();
|
}
|
|
@Override
|
public void onVideoCacheFailed(int errorNo, String msg) {
|
Log.d(TAG, "onVideoCacheFailed:" + msg);
|
}
|
});
|
} else {
|
pb_progress.setVisibility(View.GONE);
|
if (videoAdListener != null) {
|
videoAdListener.finishPlay();
|
}
|
}
|
}
|
});
|
mAdManager.setVastClassName("com.qq.e.union.demo.adapter.vast.unified.ImaNativeDataAdapter");
|
mAdManager.loadData(1);
|
|
tv_skip.setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View v) {
|
if (mAdData != null)
|
mAdData.stopVideo();
|
if (videoAdListener != null)
|
videoAdListener.finishPlay();
|
tv_skip.setVisibility(View.GONE);
|
}
|
});
|
|
}
|
|
|
@Nullable
|
public static VideoOption getVideoOption() {
|
VideoOption.Builder builder = new VideoOption.Builder();
|
builder.setAutoPlayPolicy(VideoOption.AutoPlayPolicy.NEVER);
|
builder.setAutoPlayMuted(true);
|
builder.setDetailPageMuted(false);
|
builder.setNeedCoverImage(true);
|
builder.setNeedProgressBar(false);
|
builder.setEnableDetailPage(true);
|
builder.setEnableUserControl(false);
|
return builder.build();
|
}
|
|
@Override
|
public void onResume() {
|
super.onResume();
|
if (mAdData != null) {
|
// 必须要在Activity.onResume()时通知到广告数据,以便重置广告恢复状态
|
mAdData.resume();
|
}
|
}
|
|
@Override
|
public void onDestroy() {
|
super.onDestroy();
|
if (mAdData != null) {
|
// 必须要在Actiivty.destroy()时通知到广告数据,以便释放内存
|
mAdData.destroy();
|
}
|
if (img_poster != null && timer != null)
|
img_poster.removeCallbacks(timer);
|
}
|
|
@Override
|
public void onClick(View v) {
|
|
switch (v.getId()) {
|
case R.id.tv_skip:
|
|
|
break;
|
}
|
|
}
|
|
|
public interface IVideoAdListener {
|
|
//结束播放
|
void finishPlay();
|
|
//开始播放
|
void startPlay();
|
|
}
|
}
|