package guangdiantongsdk;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.androidquery.AQuery;
import com.androidquery.callback.AjaxStatus;
import com.androidquery.callback.BitmapAjaxCallback;
import com.example.jrm.ads.R;
import com.qq.e.ads.nativ.MediaListener;
import com.qq.e.ads.nativ.MediaView;
import com.qq.e.ads.nativ.NativeMediaAD;
import com.qq.e.ads.nativ.NativeMediaAD.NativeMediaADListener;
import com.qq.e.ads.nativ.NativeMediaADData;
import java.util.ArrayList;
import java.util.List;
import java.util.TreeSet;
/**
* ListView中接入原生视频广告的示例,这个示例在普通场景的基础上演示了onScroll接口的用法,此接口可以帮助开发者自动管理视频的播放和停止。
*
*
* 增强型接口onScroll:
* - NativeMediaADData.onScroll(int position, View view):
* - position: 广告实例在ListView数据集中的位置
* - view: ListView的实例
*
*
* 在ListView这种可以滑动的UI下,请开发者一定要管理好视频的播放和暂停,不要让广告处于屏幕可见范围之外时,还在播放视频,这将对用户体验造成不好的影响,也会影响到SDK内部的数据上报从而影响开发者的收入。
* 如果开发者不选用onScroll接口,请自己根据MediaView的可见性,调用基础接口来管理视频的播放和停止,但一定保证视频在播放时MediaView是在屏幕中可见的。
*/
public class NativeVideoListDemoActivity extends Activity {
private static final String TAG = NativeVideoListDemoActivity.class.getSimpleName();
private ListView mListView;
private Context mContext;
private List<NormalItem> mList = new ArrayList<NormalItem>(); // 非广告数据
private int mScrollState; // ListView的滑动状态
private CustomAdapter mAdapter; // 自定义适配器
private NativeMediaAD mADManager; // 原生广告manager,用于load广告数据
private AQuery mAQuery; // 第三方框架,用于加载图片,开发者根据需要使用图片加载框架即可
private List<NativeMediaADData> mADs; // 广告对象数组,广点通SDK原生广告可以一次加载多条,但是我们强烈建议开发者不要加载过多的广告而不展示,这样会影响曝光率。
public static final int MAX_ITEMS = 50; // 本示例中加载50条非广告数据
public static final int AD_COUNT = 1; // 本示例中加载1条广告
public static final int AD_POSITION = 1; // 插在ListView数据集的第2个位置
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gdtnative_video_ad);
mListView = (ListView) findViewById(R.id.listview);
initData();
}
private void initData() {
initNativeVideoAD();
loadAD();
for (int i = 0; i < MAX_ITEMS; ++i) {
mList.add(new NormalItem("No." + i + " Normal Data"));
}
mContext = getApplicationContext();
mAQuery = new AQuery(this);
mAdapter = new CustomAdapter(mList);
mListView.setAdapter(mAdapter);
/** 监听滚动事件,调用onScroll接口来自动管理视频的播放和停止 */
mListView.setOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
mScrollState = scrollState;
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount,
int totalItemCount) {
if (mScrollState == OnScrollListener.SCROLL_STATE_IDLE) {
return;
}
if (mAdapter != null) {
mAdapter.onScroll();
}
}
});
}
private void initNativeVideoAD() {
NativeMediaADListener listener = new NativeMediaADListener() {
@Override
public void onADLoaded(List<NativeMediaADData> ads) {
Toast.makeText(getApplicationContext(), "成功加载原生广告:" + ads.size() + "条",
Toast.LENGTH_SHORT).show();
if (ads.size() > 0) {
mADs = ads;
preLoadVideo();
addADIntoList();
}
}
@Override
public void onNoAD(int errorCode) {
Toast.makeText(getApplicationContext(), "加载失败,错误码:" + errorCode,
Toast.LENGTH_SHORT).show();
}
@Override
public void onADStatusChanged(NativeMediaADData ad) {
if (mAdapter != null && ad != null) {
/**
* 不要直接调用mAdapter.notifyDataSetChanged()来更新ListView中广告的下载进度,这样会引起视频播放反复重头播放、数据上报出现问题。
* 开发者应该采用局部刷新ListView数据的方法,首先检查广告item是否在屏幕可见,然后更新这一条Item的子View来刷新下载进度
*/
mAdapter.updateDownloadingItem(ad);
}
}
/**
* 广告处理发生错误,当调用一个广告对象的onExposured、onClicked、preLoadVideo接口时,如果发生了错误会回调此接口,具体的错误码含义请参考开发者文档。
*
* @param adData 广告对象
* @param errorCode 错误码,700表示视频加载失败,701表示视频播放时出现错误
*/
@Override
public void onADError(NativeMediaADData adData, int errorCode) {
Log.i(TAG, "onADError: " + errorCode);
}
/**
* 当调用一个广告对象的preLoadVideo接口时,视频素材加载完成后,会回调此接口,在此回调中可以给广告对象绑定MediaView组件播放视频。
*
* @param adData 视频素材加载完成的广告对象,很显然这个广告一定是一个带有视频素材的广告,需要给它bindView并播放它
*/
@Override
public void onADVideoLoaded(NativeMediaADData adData) {
Log.i(TAG, adData.getTitle() + " ---> 视频加载完成");
}
/**
* 广告曝光时的回调
*
* 注意:带有视频素材的原生广告可以多次曝光 按照曝光计费
* 没带有视频素材的广告只能曝光一次 按照点击计费
*
* @param adData 曝光的广告对象
*/
@Override
public void onADExposure(NativeMediaADData adData) {
Log.i(TAG, adData.getTitle() + " onADExposure");
}
/**
* 广告被点击时的回调
*
* @param adData 被点击的广告对象
*/
@Override
public void onADClicked(NativeMediaADData adData) {
Log.i(TAG, adData.getTitle() + " onADClicked");
}
};
mADManager = new NativeMediaAD(getApplicationContext(), Constants.APPID, Constants.NativeVideoPosID, listener);
}
/** 预加载广告的视频素材,保证观看体验 */
private void preLoadVideo() {
if (mADs != null && !mADs.isEmpty()) {
for (int i = 0; i < mADs.size(); i++) {
final NativeMediaADData ad = mADs.get(i);
if (ad.isVideoAD()) {
ad.preLoadVideo(); // 加载结果在onADVideoLoaded回调中返回
}
}
}
}
/** 把广告对象添加到ListView的数据集中 */
protected void addADIntoList() {
if (mADs != null && mAdapter
没有合适的资源?快使用搜索试试~ 我知道了~
Ads:广点通的sdk原始码-源码通
共103个文件
png:36个
xml:36个
java:16个
2 下载量 67 浏览量
2021-03-24
19:31:51
上传
评论
收藏 1024KB ZIP 举报
温馨提示
Ads:广点通的sdk原始码
资源详情
资源评论
资源推荐
收起资源包目录
Ads:广点通的sdk原始码-源码通 (103个子文件)
gradlew.bat 2KB
.gitignore 118B
.gitignore 7B
build.gradle 867B
build.gradle 498B
settings.gradle 15B
gradlew 5KB
GDTUnionSDK.4.9.542.min.jar 247KB
android-query-full.0.26.7.jar 204KB
android-support-v7-recyclerview.jar 188KB
gradle-wrapper.jar 52KB
NativeVideoListDemoActivity.java 22KB
NativeVideoRecyclerViewActivity.java 18KB
NativeVideoDemoActivity.java 17KB
NativeVideoPreMovieActivity.java 14KB
NativeVideoScrollViewActivity.java 10KB
SplashActivity.java 4KB
MainActivity.java 4KB
NativeADActivity.java 3KB
NativeVideoADActivity.java 3KB
BannerActivity.java 2KB
DemoListActivity.java 2KB
InterstitialADActivity.java 2KB
ExampleInstrumentedTest.java 742B
Constants.java 580B
MultiProcessNativeADActivity.java 496B
ExampleUnitTest.java 397B
splash_holder.jpg 60KB
gdt_union.png 74KB
guipagethree.png 63KB
gdt_splash_logo.png 20KB
gdticon.png 11KB
bannerword.png 10KB
ic_launcher.png 10KB
ic_launcher.png 8KB
gdt_ic_browse.png 6KB
gdt_ic_enter_fullscreen.png 5KB
ic_launcher.png 5KB
gdt_ic_volume_off.png 4KB
gdt_ic_back.png 4KB
gdt_ic_replay.png 4KB
gdt_ic_volume_on.png 4KB
ic_launcher.png 3KB
gdt_ic_exit_fullscreen.png 3KB
gdt_ic_download.png 3KB
gdt_ic_play.png 2KB
ic_launcher.png 2KB
gdt_ic_browse.png 2KB
gdt_ic_enter_fullscreen.png 2KB
gdt_ic_volume_off.png 1KB
gdt_ic_pause.png 1KB
gdt_ic_replay.png 1KB
gdt_ic_volume_on.png 1KB
gdt_ic_back.png 1KB
gdt_ic_exit_fullscreen.png 1KB
gdt_ic_progress_thumb_normal.png 930B
gdt_ic_download.png 777B
gdt_ic_play.png 634B
gdt_ic_seekbar_progress.9.png 405B
gdt_ic_seekbar_background.9.png 369B
gdt_ic_progress_thumb_normal.png 267B
gdt_ic_seekbar_progress.9.png 206B
gdt_ic_seekbar_background.9.png 196B
gdt_ic_pause.png 170B
proguard-rules.pro 775B
gradle.properties 730B
gradle-wrapper.properties 233B
activity_native_video_scroll_view.xml 11KB
AndroidManifest.xml 4KB
activity_native_video_demo.xml 4KB
item_ad.xml 3KB
activity_splash.xml 3KB
activity_native_video_pre_movie.xml 3KB
nativelistitem.xml 2KB
misc.xml 2KB
listitem_nativevideo.xml 2KB
activity_native_video_ad.xml 2KB
activity_total.xml 2KB
activity_startpage.xml 1KB
strings.xml 1KB
activity_gdtnativead_demo.xml 1KB
activity_banner.xml 1KB
activity_interstitial_ad.xml 1KB
gradle.xml 714B
compiler.xml 686B
runConfigurations.xml 564B
main.xml 548B
activity_native_video_recycler_view.xml 494B
background_circle.xml 486B
item_data.xml 466B
background_button.xml 457B
activity_main.xml 444B
styles.xml 383B
activity_gdtnative_video_ad.xml 368B
interstitial_ad.xml 368B
splash.xml 360B
banner.xml 360B
dimens.xml 358B
modules.xml 343B
skipclock.xml 311B
共 103 条
- 1
- 2
仆儿
- 粉丝: 16
- 资源: 4685
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- foldcraftlauncher_262944.apk
- 珍藏多年的基于matlab实现潮流计算程序源代码集合,包含多个潮流计算程序.rar
- 使用FPGA实现串-并型乘法器
- 基于matlab实现针对基于双曲线定位的DV-Hop算法中误差误差出一种基于加权双曲线定位的DV-Hop改进算法.rar
- 基于matlab实现由遗传算法开发的整数规划,车辆调度问题.rar
- 电视家7.0(对电视配置要求高).apk
- 免费计算机毕业设计-基于JavaEE的医院病历管理系统设计与实现(包含论文+源码)
- 手机端 我的世界融合植物大战僵尸版.apk
- 植物大战僵尸 · 戴夫的老年生活 手机版.apk
- Runcraft · 我的世界跑酷游戏 手机端.apk
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0