已经历过适配过程中踩过的坑。直接使用方法即可调用广告显示如插屏广告使用:loadExpressAd(TTAdManagerHolder.intersCodeId,300, 300)

信息流广告请看其它篇,直接使用即可

//是否显示广告
public static boolean showGG = false;private boolean mIsExpress = false; //是否请求模板广告
private boolean mIsLoaded = false; //视频是否加载完成
private TTRewardVideoAd mttRewardVideoAd;// 是否开放进阶奖励功能
private boolean isEnableAdvancedReward = false;
private RewardAdvancedInfo mRewardAdvancedInfo;/**激励视频*/
public void loadAd(final String codeId, int orientation) {if(!showGG){return;}//step4:创建广告请求参数AdSlot,具体参数含义参考文档if(mTTAdNative==null){mTTAdNative = TTAdManagerHolder.get().createAdNative(activity);}AdSlot adSlot;if (mIsExpress) {//个性化模板广告需要传入期望广告view的宽、高,单位dp,adSlot = new AdSlot.Builder().setCodeId(codeId)//此次加载广告的用途是实时加载,当用来作为缓存时,请使用:TTAdLoadType.LOAD.setAdLoadType(TTAdLoadType.LOAD)//模板广告需要设置期望个性化模板广告的大小,单位dp,激励视频场景,只要设置的值大于0即可.setExpressViewAcceptedSize(500,500).build();} else {//模板广告需要设置期望个性化模板广告的大小,单位dp,代码位是否属于个性化模板广告,请在穿山甲平台查看adSlot = new AdSlot.Builder()//此次加载广告的用途是实时加载,当用来作为缓存时,请使用:TTAdLoadType.LOAD.setAdLoadType(TTAdLoadType.LOAD).setCodeId(codeId).build();}//step5:请求广告mTTAdNative.loadRewardVideoAd(adSlot, new TTAdNative.RewardVideoAdListener() {@Overridepublic void onError(int code, String message) {Log.e(TAG, "Callback --> onError: " + code + ", " + String.valueOf(message));//TToast.show(activity, message);}//视频广告加载后,视频资源缓存到本地的回调,在此回调后,播放本地视频,流畅不阻塞。@Overridepublic void onRewardVideoCached() {Log.e(TAG, "Callback --> onRewardVideoCached");mIsLoaded = true;TToast.show(activity, "Callback --> rewardVideoAd video cached");}@Overridepublic void onRewardVideoCached(TTRewardVideoAd ad) {Log.e(TAG, "Callback --> onRewardVideoCached");mIsLoaded = true;TToast.show(activity, "Callback --> rewardVideoAd video cached");// ad.showRewardVideoAd(activity, TTAdConstant.RitScenes.CUSTOMIZE_SCENES, "scenes_test");}//视频广告的素材加载完毕,比如视频url等,在此回调后,可以播放在线视频,网络不好可能出现加载缓冲,影响体验。@Overridepublic void onRewardVideoAdLoad(TTRewardVideoAd ad) {Log.e(TAG, "Callback --> onRewardVideoAdLoad");TToast.show(activity, "rewardVideoAd loaded 广告类型:" + getAdType(ad.getRewardVideoAdType()));mIsLoaded = false;mttRewardVideoAd = ad;mRewardAdvancedInfo = new RewardAdvancedInfo();mttRewardVideoAd.showRewardVideoAd(activity, TTAdConstant.RitScenes.CUSTOMIZE_SCENES, "scenes_test");mttRewardVideoAd.setRewardAdInteractionListener(new TTRewardVideoAd.RewardAdInteractionListener() {/*@Overridepublic void onRewardArrived(boolean b, int i, Bundle bundle) {}*/@Overridepublic void onAdShow() {Log.d(TAG, "Callback --> rewardVideoAd show");TToast.show(activity, "rewardVideoAd show");}@Overridepublic void onAdVideoBarClick() {Log.d(TAG, "Callback --> rewardVideoAd bar click");TToast.show(activity, "rewardVideoAd bar click");}@Overridepublic void onAdClose() {Log.d(TAG, "Callback --> rewardVideoAd close");TToast.show(activity, "rewardVideoAd close");if (isEnableAdvancedReward && mRewardAdvancedInfo != null) {Log.d(TAG, "本次奖励共发放:" + mRewardAdvancedInfo.getRewardAdvancedAmount());}}//视频播放完成回调@Overridepublic void onVideoComplete() {Log.d(TAG, "Callback --> rewardVideoAd complete");TToast.show(activity, "rewardVideoAd complete");}@Overridepublic void onVideoError() {Log.e(TAG, "Callback --> rewardVideoAd error");TToast.show(activity, "rewardVideoAd error");}//视频播放完成后,奖励验证回调,rewardVerify:是否有效,rewardAmount:奖励梳理,rewardName:奖励名称@Overridepublic void onRewardVerify(boolean rewardVerify, int rewardAmount, String rewardName, int errorCode, String errorMsg) {String logString = "verify:" + rewardVerify + " amount:" + rewardAmount +" name:" + rewardName + " errorCode:" + errorCode + " errorMsg:" + errorMsg;Log.e(TAG, "Callback --> " + logString);TToast.show(activity, logString);}/* @Overridepublic void onRewardArrived(boolean isRewardValid, int rewardType, Bundle extraInfo) {RewardBundleModel rewardBundleModel = new RewardBundleModel(extraInfo);Log.e(TAG, "Callback --> rewardVideoAd has onRewardArrived " +"\n奖励是否有效:" + isRewardValid +"\n奖励类型:" + rewardType +"\n奖励名称:" + rewardBundleModel.getRewardName() +"\n奖励数量:" + rewardBundleModel.getRewardAmount() +"\n建议奖励百分比:" + rewardBundleModel.getRewardPropose());if (!isRewardValid) {Log.d(TAG, "发送奖励失败 code:" + rewardBundleModel.getServerErrorCode() +"\n msg:" + rewardBundleModel.getServerErrorMsg());return;}if (!isEnableAdvancedReward) {// 未使用进阶奖励功能if (rewardType == TTRewardVideoAd.REWARD_TYPE_DEFAULT) {Log.d(TAG, "普通奖励发放,name:" + rewardBundleModel.getRewardName() +"\namount:" + rewardBundleModel.getRewardAmount());}} else {// 使用了进阶奖励功能if (mRewardAdvancedInfo != null) {mRewardAdvancedInfo.proxyRewardModel(rewardBundleModel, false);}}}*/@Overridepublic void onSkippedVideo() {Log.e(TAG, "Callback --> rewardVideoAd has onSkippedVideo");TToast.show(activity, "rewardVideoAd has onSkippedVideo");}});mttRewardVideoAd.setRewardPlayAgainInteractionListener(new TTRewardVideoAd.RewardAdInteractionListener() {/*@Overridepublic void onRewardArrived(boolean b, int i, Bundle bundle) {}*/@Overridepublic void onAdShow() {Log.d(TAG, "Callback --> rewardPlayAgain show");TToast.show(activity, "rewardVideoAd show");}@Overridepublic void onAdVideoBarClick() {Log.d(TAG, "Callback --> rewardPlayAgain bar click");TToast.show(activity, "rewardVideoAd bar click");}@Overridepublic void onAdClose() {Log.d(TAG, "Callback --> rewardPlayAgain close");TToast.show(activity, "rewardVideoAd close");}//视频播放完成回调@Overridepublic void onVideoComplete() {Log.d(TAG, "Callback --> rewardPlayAgain complete");TToast.show(activity, "rewardVideoAd complete");}@Overridepublic void onVideoError() {Log.e(TAG, "Callback --> rewardPlayAgain error");TToast.show(activity, "rewardVideoAd error");}//视频播放完成后,奖励验证回调,rewardVerify:是否有效,rewardAmount:奖励梳理,rewardName:奖励名称@Overridepublic void onRewardVerify(boolean rewardVerify, int rewardAmount, String rewardName, int errorCode, String errorMsg) {String logString = "rewardPlayAgain verify:" + rewardVerify + " amount:" + rewardAmount +" name:" + rewardName + " errorCode:" + errorCode + " errorMsg:" + errorMsg;Log.e(TAG, "Callback --> " + logString);TToast.show(activity, logString);}/* @Overridepublic void onRewardArrived(boolean isRewardValid, int rewardType, Bundle extraInfo) {RewardBundleModel rewardBundleModel = new RewardBundleModel(extraInfo);Log.e(TAG, "Callback --> rewardPlayAgain has onRewardArrived " +"\n奖励是否有效:" + isRewardValid +"\n奖励类型:" + rewardType +"\n奖励名称:" + rewardBundleModel.getRewardName() +"\n奖励数量:" + rewardBundleModel.getRewardAmount() +"\n建议奖励百分比:" + rewardBundleModel.getRewardPropose());if (!isEnableAdvancedReward) {// 再看一个未使用进阶奖励功能if (rewardType == TTRewardVideoAd.REWARD_TYPE_DEFAULT) {Log.d(TAG, "再看一个普通奖励发放,name:" + rewardBundleModel.getRewardName() +"\namount:" + rewardBundleModel.getRewardAmount());}} else {// 再看一个使用了进阶奖励功能if (mRewardAdvancedInfo != null) {mRewardAdvancedInfo.proxyRewardModel(rewardBundleModel, true);}}}*/@Overridepublic void onSkippedVideo() {Log.e(TAG, "Callback --> rewardPlayAgain has onSkippedVideo");TToast.show(activity, "rewardVideoAd has onSkippedVideo");}});mttRewardVideoAd.setDownloadListener(new TTAppDownloadListener() {@Overridepublic void onIdle() {mHasShowDownloadActive = false;}@Overridepublic void onDownloadActive(long totalBytes, long currBytes, String fileName, String appName) {Log.d("DML", "onDownloadActive==totalBytes=" + totalBytes + ",currBytes=" + currBytes + ",fileName=" + fileName + ",appName=" + appName);if (!mHasShowDownloadActive) {mHasShowDownloadActive = true;TToast.show(activity, "下载中,点击下载区域暂停", Toast.LENGTH_LONG);}}@Overridepublic void onDownloadPaused(long totalBytes, long currBytes, String fileName, String appName) {Log.d("DML", "onDownloadPaused===totalBytes=" + totalBytes + ",currBytes=" + currBytes + ",fileName=" + fileName + ",appName=" + appName);TToast.show(activity, "下载暂停,点击下载区域继续", Toast.LENGTH_LONG);}@Overridepublic void onDownloadFailed(long totalBytes, long currBytes, String fileName, String appName) {Log.d("DML", "onDownloadFailed==totalBytes=" + totalBytes + ",currBytes=" + currBytes + ",fileName=" + fileName + ",appName=" + appName);TToast.show(activity, "下载失败,点击下载区域重新下载", Toast.LENGTH_LONG);}@Overridepublic void onDownloadFinished(long totalBytes, String fileName, String appName) {Log.d("DML", "onDownloadFinished==totalBytes=" + totalBytes + ",fileName=" + fileName + ",appName=" + appName);TToast.show(activity, "下载完成,点击下载区域重新下载", Toast.LENGTH_LONG);}@Overridepublic void onInstalled(String fileName, String appName) {Log.d("DML", "onInstalled==" + ",fileName=" + fileName + ",appName=" + appName);TToast.show(activity, "安装完成,点击下载区域打开", Toast.LENGTH_LONG);}});}});
}
private String getAdType(int type) {switch (type) {case TTAdConstant.AD_TYPE_COMMON_VIDEO:return "普通激励视频,type=" + type;case TTAdConstant.AD_TYPE_PLAYABLE_VIDEO:return "Playable激励视频,type=" + type;case TTAdConstant.AD_TYPE_PLAYABLE:return "纯Playable,type=" + type;case TTAdConstant.AD_TYPE_LIVE:return "直播流,type=" + type;}return "未知类型+type=" + type;
}/**插屏广告*/
public void loadExpressAd(String codeId, int expressViewWidth, int expressViewHeight) {if(!showGG){return;}//step4:创建广告请求参数AdSlot,具体参数含义参考文档if(mTTAdNative==null){mTTAdNative = TTAdManagerHolder.get().createAdNative(activity);}AdSlot adSlot = new AdSlot.Builder().setCodeId(codeId) //广告位id.setAdCount(1) //请求广告数量为1到3条.setExpressViewAcceptedSize(expressViewWidth, expressViewHeight) //期望模板广告view的size,单位dp.build();//step5:请求广告,对请求回调的广告作渲染处理mTTAdNative.loadInteractionExpressAd(adSlot, new TTAdNative.NativeExpressAdListener() {@Overridepublic void onError(int code, String message) {TToast.show(activity, "load error : " + code + ", " + message);}@Overridepublic void onNativeExpressAdLoad(List<TTNativeExpressAd> ads) {if (ads == null || ads.size() == 0) {return;}LogUtils.v("success=="+ads.size());mTTAd = ads.get(0);bindAdListener(mTTAd);mTTAd.render();//TToast.show(activity, "load success !");}});
}
private void bindAdListener(final TTNativeExpressAd ad) {ad.setExpressInteractionListener(new TTNativeExpressAd.AdInteractionListener() {@Overridepublic void onAdDismiss() {// TToast.show(activity, "广告关闭");}@Overridepublic void onAdClicked(View view, int type) {// TToast.show(activity, "广告被点击");}@Overridepublic void onAdShow(View view, int type) {TToast.show(activity, "广告展示");}@Overridepublic void onRenderFail(View view, String msg, int code) {TToast.show(activity, msg + " code:" + code);}@Overridepublic void onRenderSuccess(View view, float width, float height) {//返回view的宽高 单位 dpTToast.show(activity, "渲染成功");ad.showInteractionExpressAd(activity);}});bindDislike(ad, false);if (ad.getInteractionType() != TTAdConstant.INTERACTION_TYPE_DOWNLOAD) {return;}ad.setDownloadListener(new TTAppDownloadListener() {@Overridepublic void onIdle() {TToast.show(activity, "点击开始下载", Toast.LENGTH_LONG);}@Overridepublic void onDownloadActive(long totalBytes, long currBytes, String fileName, String appName) {if (!mHasShowDownloadActive) {mHasShowDownloadActive = true;TToast.show(activity, "下载中,点击暂停", Toast.LENGTH_LONG);}}@Overridepublic void onDownloadPaused(long totalBytes, long currBytes, String fileName, String appName) {TToast.show(activity, "下载暂停,点击继续", Toast.LENGTH_LONG);}@Overridepublic void onDownloadFailed(long totalBytes, long currBytes, String fileName, String appName) {TToast.show(activity, "下载失败,点击重新下载", Toast.LENGTH_LONG);}@Overridepublic void onInstalled(String fileName, String appName) {TToast.show(activity, "安装完成,点击图片打开", Toast.LENGTH_LONG);}@Overridepublic void onDownloadFinished(long totalBytes, String fileName, String appName) {TToast.show(activity, "点击安装", Toast.LENGTH_LONG);}});
}
private void bindDislike(TTNativeExpressAd ad, boolean customStyle) {if (customStyle) {//使用自定义样式DislikeInfo dislikeInfo = ad.getDislikeInfo();if (dislikeInfo == null || dislikeInfo.getFilterWords() == null || dislikeInfo.getFilterWords().isEmpty()) {return;}final DislikeDialog dislikeDialog = new DislikeDialog(activity, dislikeInfo);dislikeDialog.setOnDislikeItemClick(new DislikeDialog.OnDislikeItemClick() {@Overridepublic void onItemClick(FilterWord filterWord) {//屏蔽广告TToast.show(activity, "点击 " + filterWord.getName());}});dislikeDialog.setOnPersonalizationPromptClick(new DislikeDialog.OnPersonalizationPromptClick() {@Overridepublic void onClick(PersonalizationPrompt personalizationPrompt) {TToast.show(activity, "点击了为什么看到此广告");}});ad.setDislikeDialog(dislikeDialog);return;}//使用默认模板中默认dislike弹出样式ad.setDislikeCallback(activity, new TTAdDislike.DislikeInteractionCallback() {@Overridepublic void onShow() {}@Overridepublic void onSelected(int position, String value, boolean enforce) {//TToast.show(mContext, "反馈了 " + value);TToast.show(activity, "\t\t\t\t\t\t\t感谢您的反馈!\t\t\t\t\t\t\n我们将为您带来更优质的广告体验", 3);if (enforce) {TToast.show(activity, "InteractionExpressActivity 模版插屏,穿山甲sdk强制将view关闭了 ");}}@Overridepublic void onCancel() {TToast.show(activity, "点击取消 ");}});
}
public void loadNativeExpressAd(ListView mListView, ProjectsAdapter myAdapter, List<ProjectsItem> mData,int w, int h){if(!showGG){return;}LIST_ITEM_COUNT = mData.size();int AdCount = LIST_ITEM_COUNT/10+1;if(AdCount>3){AdCount = 3;}//feed广告请求类型参数if(mTTAdNative==null){mTTAdNative = TTAdManagerHolder.get().createAdNative(activity);}AdSlot adSlot = new AdSlot.Builder().setCodeId(TTAdManagerHolder.FeedCodeId) //广告位id.setSupportDeepLink(true).setAdCount(AdCount) //请求广告数量为1到3条.setExpressViewAcceptedSize(w-30,0) //期望模板广告view的size,单位dp// .setAdLoadType(TTAdLoadType.PRELOAD)//推荐使用,用于标注此次的广告请求用途为预加载(当做缓存)还是实时加载,方便后续为开发者优化相关策略.build();mTTAdNative.loadNativeExpressAd(adSlot, new TTAdNative.NativeExpressAdListener() {//广告请求失败@Overridepublic void onError(int code, String message) {LogUtils.v(code+"loadFeedAd=="+message);}//广告请求成功@Overridepublic void onNativeExpressAdLoad(List<TTNativeExpressAd> ads) {LogUtils.v("onNativeExpressAdLoad=="+ads.size());if (ads == null || ads.isEmpty()) {TToast.show(activity, "on FeedAdLoaded: ad is null!");return;}for (TTNativeExpressAd ad : ads) {int random = (int) (Math.random() * LIST_ITEM_COUNT);LogUtils.v("========"+random);try{ProjectsItem bean = new ProjectsItem();bean.setNativeExpressAd(ad);bindAdListener1(ad);mData.add(random, bean);}catch (Exception e){}}myAdapter.notifyDataSetChanged();}});}
public void loadNativeExpressAd(ListView mListView, NativeAdapter myAdapter, List<BannerBean> mData,int w, int h){if(!showGG){return;}LIST_ITEM_COUNT = mData.size();int AdCount = LIST_ITEM_COUNT/10+1;//feed广告请求类型参数if(mTTAdNative==null){mTTAdNative = TTAdManagerHolder.get().createAdNative(activity);}AdSlot adSlot = new AdSlot.Builder().setCodeId(TTAdManagerHolder.FeedCodeId) //广告位id.setSupportDeepLink(true).setAdCount(AdCount) //请求广告数量为1到3条.setExpressViewAcceptedSize(w-30,0) //期望模板广告view的size,单位dp// .setAdLoadType(TTAdLoadType.PRELOAD)//推荐使用,用于标注此次的广告请求用途为预加载(当做缓存)还是实时加载,方便后续为开发者优化相关策略.build();mTTAdNative.loadNativeExpressAd(adSlot, new TTAdNative.NativeExpressAdListener() {//广告请求失败@Overridepublic void onError(int code, String message) {LogUtils.v(code+"loadFeedAd=="+message);}//广告请求成功@Overridepublic void onNativeExpressAdLoad(List<TTNativeExpressAd> ads) {LogUtils.v("onNativeExpressAdLoad=="+ads.size());if (ads == null || ads.isEmpty()) {TToast.show(activity, "on FeedAdLoaded: ad is null!");return;}for (TTNativeExpressAd ad : ads) {int random = (int) (Math.random() * LIST_ITEM_COUNT);LogUtils.v("========"+random);try{BannerBean bean = new BannerBean();bean.setNativeExpressAd(ad);bindAdListener1(ad);mData.add(random, bean);}catch (Exception e){}}myAdapter.notifyDataSetChanged();}});}
private void bindAdListener1(final TTNativeExpressAd adTmp) {adTmp.setExpressInteractionListener(new TTNativeExpressAd.ExpressAdInteractionListener() {@Overridepublic void onAdClicked(View view, int type) {TToast.show(activity, "广告被点击");}@Overridepublic void onAdShow(View view, int type) {TToast.show(activity, "广告展示");}@Overridepublic void onRenderFail(View view, String msg, int code) {TToast.show(activity, msg + " code:" + code);}@Overridepublic void onRenderSuccess(View view, float width, float height) {//返回view的宽高 单位 dpTToast.show(activity, "渲染成功");}});adTmp.render();}
/*** 信息流* 加载feed广告*/
private static  int LIST_ITEM_COUNT = 0;
public void loadListAd(RecyclerView mListView, ClassifyListAdapter myAdapter, List<BannerBean> mData,int w,int h) {if(!showGG){return;}LIST_ITEM_COUNT = mData.size();int AdCount = LIST_ITEM_COUNT/10+1;//feed广告请求类型参数if(mTTAdNative==null){mTTAdNative = TTAdManagerHolder.get().createAdNative(activity);}LogUtils.v(w,h);AdSlot adSlot = new AdSlot.Builder().setCodeId(TTAdManagerHolder.FeedCodeId).setImageAcceptedSize(w, h).setAdCount(AdCount).build();//调用feed广告异步请求接口mTTAdNative.loadFeedAd(adSlot, new TTAdNative.FeedAdListener() {@Overridepublic void onError(int code, String message) {LogUtils.v(code+"loadFeedAd=="+message);TToast.show(activity, message);}@Overridepublic void onFeedAdLoad(List<TTFeedAd> ads) {if (ads == null || ads.isEmpty()) {TToast.show(activity, "on FeedAdLoaded: ad is null!");return;}for (int i = 0; i < LIST_ITEM_COUNT; i++) {mData.add(null);}int count = mData.size();for (TTFeedAd ad : ads) {int random = (int) (Math.random() * LIST_ITEM_COUNT);LogUtils.v("========"+random);try{LogUtils.v(ad.getClass().getName());BannerBean bean = new BannerBean();bean.setFeedAd(ad);mData.add(random, bean);}catch (Exception e){}}myAdapter.notifyDataSetChanged();}});
}/**banner广告展示*/
private TTAdNative mTTAdNative;
private TTNativeExpressAd mTTAd;
public void loadExpressAd(FrameLayout mExpressContainer,String codeId, float expressViewWidth, float expressViewHeight){if(!showGG){mExpressContainer.setVisibility(View.GONE);return;}if(mTTAdNative==null){mTTAdNative = TTAdManagerHolder.get().createAdNative(activity);TTAdManagerHolder.get().requestPermissionIfNecessary(activity);}AdSlot adSlot = new AdSlot.Builder().setCodeId(codeId) //广告位id.setAdCount(3) //请求广告数量为1到3条.setExpressViewAcceptedSize(expressViewWidth, expressViewHeight) //期望模板广告view的size,单位dp.build();//step5:请求广告,对请求回调的广告作渲染处理mTTAdNative.loadBannerExpressAd(adSlot, new TTAdNative.NativeExpressAdListener() {@Overridepublic void onError(int code, String message) {LogUtils.v(code+"loadBannerExpressAd="+message);mExpressContainer.removeAllViews();}@Overridepublic void onNativeExpressAdLoad(List<TTNativeExpressAd> ads) {LogUtils.v("onNativeExpressAdLoad="+ads.size());if (ads == null || ads.size() == 0) {return;}mTTAd = ads.get(0);mTTAd.setSlideIntervalTime(30 * 1000);bindAdListener(mTTAd,mExpressContainer);TToast.show(activity,"load success!");mTTAd.render();}});}
private boolean mHasShowDownloadActive = false;
public void bindAdListener(TTNativeExpressAd ad, FrameLayout mExpressContainer) {ad.setExpressInteractionListener(new TTNativeExpressAd.ExpressAdInteractionListener() {@Overridepublic void onAdClicked(View view, int type) {TToast.show(activity, "广告被点击");}@Overridepublic void onAdShow(View view, int type) {TToast.show(activity, "广告展示");}@Overridepublic void onRenderFail(View view, String msg, int code) {//Log.e("ExpressView", "render fail:" + (System.currentTimeMillis() - startTime));TToast.show(activity, msg + " code:" + code);}@Overridepublic void onRenderSuccess(View view, float width, float height) {// Log.e("ExpressView", "render suc:" + (System.currentTimeMillis() - startTime));//返回view的宽高 单位 dpTToast.show(activity, "渲染成功");mExpressContainer.removeAllViews();mExpressContainer.addView(view);}});//dislike设置bindDislike(ad,  mExpressContainer,false);if (ad.getInteractionType() != TTAdConstant.INTERACTION_TYPE_DOWNLOAD) {return;}ad.setDownloadListener(new TTAppDownloadListener() {@Overridepublic void onIdle() {TToast.show(activity, "开始下载", Toast.LENGTH_LONG);}@Overridepublic void onDownloadActive(long totalBytes, long currBytes, String fileName, String appName) {if (!mHasShowDownloadActive) {mHasShowDownloadActive = true;TToast.show(activity, "下载中,点击暂停", Toast.LENGTH_LONG);}}@Overridepublic void onDownloadPaused(long totalBytes, long currBytes, String fileName, String appName) {TToast.show(activity, "下载暂停,点击继续", Toast.LENGTH_LONG);}@Overridepublic void onDownloadFailed(long totalBytes, long currBytes, String fileName, String appName) {TToast.show(activity, "下载失败,点击重新下载", Toast.LENGTH_LONG);}@Overridepublic void onInstalled(String fileName, String appName) {TToast.show(activity, "安装完成,点击图片打开", Toast.LENGTH_LONG);}@Overridepublic void onDownloadFinished(long totalBytes, String fileName, String appName) {TToast.show(activity, "点击安装", Toast.LENGTH_LONG);}});
}
/*** 设置广告的不喜欢, 注意:强烈建议设置该逻辑,如果不设置dislike处理逻辑,则模板广告中的 dislike区域不响应dislike事件。** @param ad* @param customStyle 是否自定义样式,true:样式自定义*/private void bindDislike(TTNativeExpressAd ad,FrameLayout mExpressContainer, boolean customStyle) {if (customStyle) {//使用自定义样式final DislikeInfo dislikeInfo = ad.getDislikeInfo();if (dislikeInfo == null || dislikeInfo.getFilterWords() == null || dislikeInfo.getFilterWords().isEmpty()) {return;}final DislikeDialog dislikeDialog = new DislikeDialog(activity, dislikeInfo);dislikeDialog.setOnDislikeItemClick(new DislikeDialog.OnDislikeItemClick() {@Overridepublic void onItemClick(FilterWord filterWord) {//屏蔽广告TToast.show(activity, "点击 " + filterWord.getName());//用户选择不喜欢原因后,移除广告展示mExpressContainer.removeAllViews();}});dislikeDialog.setOnPersonalizationPromptClick(new DislikeDialog.OnPersonalizationPromptClick() {@Overridepublic void onClick(PersonalizationPrompt personalizationPrompt) {TToast.show(activity, "点击了为什么看到此广告");}});ad.setDislikeDialog(dislikeDialog);return;}//使用默认模板中默认dislike弹出样式ad.setDislikeCallback(activity, new TTAdDislike.DislikeInteractionCallback() {@Overridepublic void onShow() {}@Overridepublic void onSelected(int position, String value, boolean enforce) {TToast.show(activity, "点击 " + value);mExpressContainer.removeAllViews();//用户选择不喜欢原因后,移除广告展示if (enforce) {TToast.show(activity, "模版Banner 穿山甲sdk强制将view关闭了");}}@Overridepublic void onCancel() {TToast.show(activity, "点击取消 ");}});
}

Android穿山甲SDK接入,已封装直接使用相关推荐

  1. Android穿山甲SDK接入信息流广告

    listView信息流 public class ProjectsAdapter extends BaseAdapter {private static final int ITEM_VIEW_TYP ...

  2. android美颜功能吗,Android美颜sdk接入之前需要知道这些知识吗

    原标题:Android美颜sdk接入之前需要知道这些知识吗 既然是美颜sdk,那么肯定会涉及到图像方面的技术或算法.像是直播或短视频这类应用场景,他们在接入Android美颜sdk之前都会根据各自情况 ...

  3. android 支付宝sdk接入详解

    android 支付宝sdk接入详解 第一步 在接入支付宝sdk之前首先要进入支付宝开发者平台申请应用所需要的应用唯一标识(APPID).应用私钥(APP_PRIVATE_KEY).支付宝公钥(ALI ...

  4. Android 穿山甲广告接入教程

    穿山甲广告接入教程 相信大家都有碰到过在应用内加广告的需求,大部分的做法都是在开屏页加广告吸引用户点击跳转.目前市面上的广告sdk有很多,今天我们就来介绍一下穿上甲广告的简单集成接入 sdk资源集成地 ...

  5. Android渠道SDK接入常见问题

    应用宝 1. demo可以而游戏微信登陆收不到回调 这是由于速接sdk的onNewIntent没有被调用.解决办法是在ysdk的额外配置脚本中,删除游戏的FirstActivity并将mainActi ...

  6. Android RenRen SDK 接入教程

    本教程将讲解如何在Android设备上构建应用并接入人人网.通过下面简单的步骤,我们向你展示了接入人人网的几个关键步骤. 从零开始,按照本教程一步一步地进行,最后你将得到一个可以在Android模拟器 ...

  7. android 第三方SDK接入一般流程

    1 官方文档必看 官方文档接入一般包括常规接入和自定义接入.这里的建议是:先常规接入,跑起来,并测试正常之后,然后实现自定义的接入. 目前我接入过的包括:常用的支付,地图,推送,分享,热更新,功能性s ...

  8. unity3d Android多渠道,Unity For Android多渠道SDK接入解决方案

    SDK一般分为以下几个(常用的)函数 Login()sdk初始化函数 Logic()SDK登陆函数 LogOut() sdk登出函数 Pay()支付 GameCenter()社区 总体框架: ---- ...

  9. android分享到陌陌,Android分享SDK接入指南

    4.在代码中使用开发工具包¶ [1] 初始化 在程序入口Activity的onCreate回调函数处,或其他合适的地方创建momoApi,传入你申请的appId [2] 发送分享请求到陌陌 你的应用要 ...

最新文章

  1. #pragma pack 内存对齐
  2. java cirteria_java – 简单的JPA CriteriaQuery的条件
  3. AngularJS 国际化——Angular-translate
  4. 【Android 应用开发】Android 图表绘制 achartengine 示例解析
  5. 深入浅出聊一聊Docker
  6. 通过 PL/SQL Developer 建表
  7. [react-router] React-Router怎么获取历史对象?
  8. 队列加分项(选作,根据博客质量加1-5分)(补博客)
  9. Apache Rewrite实现URL的301跳转和域名跳转
  10. Flutter仿写一个iOS风格的通讯录
  11. FGSM实例:利用fgsm攻击RMB识别模型
  12. 几种物流业务的凭证模板设置说明
  13. Python学习之——np.dot()与np.multiply()与*之间的区别
  14. linux下查看book文件夹,Linux初级入门百篇-find命令
  15. 精灵骑士二觉_精灵骑士二觉版本小百科,先睹为快
  16. 解密Kerberos流量
  17. jellyfin自定义css主题
  18. 计算机电源常见的认证有哪些,看清电源的各种认证
  19. java写的网络版斗地主_用java实现斗地主
  20. TensorFlow CRNN

热门文章

  1. 一元享移动怎么样_中国移动终于认怂?29元享100G流量还不限速,网友:后悔携号转网了...
  2. 阿里云盘和 Teambition 网盘
  3. c1语言学生综合测评,学生综合素质评语
  4. https网站安全证书提示已过期怎么办?
  5. mac下统计代码行数方法
  6. android课程设计健身,健身软件课程设计-毕业论文.doc
  7. 动画:从 AE 到 Web
  8. 数据结构与算法(一) 链表(代码示例)
  9. 【无标题】我们的三周年————致我的小宝贝
  10. python 英语翻译 excel_Python调用百度翻译api批量翻译Excel这工作效率