pda/zhuike/src/main/java/com/novelbook/android/Activity_base.java

786 lines
29 KiB
Java
Raw Normal View History

2019-04-02 17:41:53 +08:00
package com.novelbook.android;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
2019-04-21 10:57:20 +08:00
import android.content.pm.ActivityInfo;
2019-04-02 17:41:53 +08:00
import android.os.Bundle;
2019-04-21 10:57:20 +08:00
import android.os.Handler;
import android.os.Message;
2019-04-02 17:41:53 +08:00
import android.support.annotation.Nullable;
2019-06-03 00:32:52 +08:00
2019-04-02 17:41:53 +08:00
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
2019-06-01 22:01:34 +08:00
import android.util.Log;
import android.view.LayoutInflater;
2019-04-02 17:41:53 +08:00
import android.view.MenuItem;
import android.view.View;
2019-06-01 22:01:34 +08:00
import android.view.ViewGroup;
2019-04-02 17:41:53 +08:00
import android.widget.Button;
2019-06-01 22:01:34 +08:00
import android.widget.FrameLayout;
2019-04-11 18:05:41 +08:00
import android.widget.ImageView;
2019-04-02 17:41:53 +08:00
import android.widget.TextView;
import android.widget.Toast;
2019-06-01 22:01:34 +08:00
import com.androidquery.callback.AQuery2;
import com.androidquery.callback.ImageOptions;
import com.bytedance.sdk.openadsdk.AdSlot;
import com.bytedance.sdk.openadsdk.TTAdConstant;
import com.bytedance.sdk.openadsdk.TTAdDislike;
import com.bytedance.sdk.openadsdk.TTAdNative;
import com.bytedance.sdk.openadsdk.TTAppDownloadListener;
import com.bytedance.sdk.openadsdk.TTBannerAd;
2019-06-03 00:32:52 +08:00
2019-06-01 22:01:34 +08:00
import com.bytedance.sdk.openadsdk.TTImage;
2019-06-04 00:13:32 +08:00
import com.bytedance.sdk.openadsdk.TTInteractionAd;
2019-06-01 22:01:34 +08:00
import com.bytedance.sdk.openadsdk.TTNativeAd;
2019-04-11 18:05:41 +08:00
import com.google.gson.Gson;
2019-06-01 22:01:34 +08:00
import com.novelbook.android.AD.toutiao.TTAdManagerHolder;
2019-06-03 00:32:52 +08:00
2019-04-03 16:21:00 +08:00
import com.novelbook.android.db.Novel;
2019-06-03 00:32:52 +08:00
2019-05-13 00:18:07 +08:00
import com.novelbook.android.netutils.NetUtil;
2019-06-03 00:32:52 +08:00
2019-05-11 23:21:57 +08:00
import com.novelbook.android.upgrade.UpdateManager;
2019-05-25 23:57:12 +08:00
import com.novelbook.android.utils.CommonUtil;
2019-06-03 00:32:52 +08:00
2019-06-04 00:13:32 +08:00
import com.novelbook.android.utils.Constants;
2019-04-11 18:05:41 +08:00
import com.novelbook.android.utils.ImageUtil;
2019-06-03 00:32:52 +08:00
2019-04-02 17:41:53 +08:00
import com.novelbook.android.utils.OnItemClickListener;
import com.novelbook.android.adapter.BookListAdapter;
2019-06-03 00:32:52 +08:00
2019-04-02 17:41:53 +08:00
import java.util.ArrayList;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
public abstract class Activity_base extends AppCompatActivity {
2019-06-01 22:01:34 +08:00
private static String TAG ="Activity_base";
2019-04-02 17:41:53 +08:00
private ProgressDialog mProgressDialog;
2019-05-28 23:57:05 +08:00
private MyApp application;
private Activity_base oContext;
2019-04-11 18:05:41 +08:00
protected Gson gson = new Gson();
2019-04-02 17:41:53 +08:00
@Nullable
2019-04-16 23:11:00 +08:00
@BindView(R.id.toolbar)
Toolbar toolbar;
@Nullable
2019-06-01 22:01:34 +08:00
@BindView(R.id.banner_container)
FrameLayout mBannerContainer;
2019-06-03 00:32:52 +08:00
/* @Nullable
@BindView(R.id.banner_native_container)
FrameLayout mNativeBannerContainer;*/
2019-06-01 22:01:34 +08:00
@Nullable
2019-04-02 17:41:53 +08:00
@BindView(R.id.recycleViewBookList)
RecyclerView rvshudan;
void showBook(String bookName) { //show paihangbang activity
Intent intent = new Intent(this, BookActivity.class);
intent.putExtra("BOOKNAME",bookName);
startActivity(intent);
}
2019-04-11 18:05:41 +08:00
// protected MyImageLoader imgloader = new MyImageLoader();
2019-04-02 17:41:53 +08:00
/**
* 初始化布局
*/
public abstract int getLayoutRes();
protected abstract void initViews();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
2019-05-28 23:57:05 +08:00
if (application == null) {
// 得到Application对象
application = (MyApp) getApplication();
}
oContext = this;// 把当前的上下文对象赋值给BaseActivity
addActivity();// 调用添加方法
2019-04-21 10:57:20 +08:00
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
2019-04-02 17:41:53 +08:00
setContentView(getLayoutRes());
ButterKnife.bind(this);
setupToolbar();
// 初始化View注入
2019-06-01 22:01:34 +08:00
initAD_TouTiao();
2019-04-02 17:41:53 +08:00
setTitle();
initData();
initViews();
2019-05-11 23:21:57 +08:00
2019-04-02 17:41:53 +08:00
}
2019-04-16 23:11:00 +08:00
2019-04-02 17:41:53 +08:00
protected void setupToolbar(){
// Toolbar toolbar = findViewById(R.id.toolbar);
// setSupportActionBar(toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
protected abstract void setTitle();
protected abstract void initData() ;
2019-04-20 00:26:49 +08:00
@Override
protected void onResume() {
super.onResume();
2019-05-11 23:21:57 +08:00
// MobclickAgent.onResume(this);
2019-04-20 00:26:49 +08:00
}
@Override
protected void onPause(){
super.onPause();
hideProgress();
2019-05-11 23:21:57 +08:00
// MobclickAgent.onPause(this);
2019-04-20 00:26:49 +08:00
}
2019-05-18 23:02:33 +08:00
protected void closeCurrentActitivty(){
if( this instanceof BookActivity ) {
2019-06-01 22:01:34 +08:00
// return;
2019-05-18 23:02:33 +08:00
}
finish();
}
2019-04-12 23:02:31 +08:00
protected BookListAdapter getBookListAdapter(List<Novel> mDatas,int itemResourceId){
BookListAdapter mAdapter = new BookListAdapter(this ,mDatas,itemResourceId,new OnItemClickListener()
2019-04-02 17:41:53 +08:00
{
@Override
public void onItemClick(View view, int position)
{
2019-04-18 17:19:42 +08:00
2019-04-12 23:02:31 +08:00
// showBook("射雕" +position);
showBookDetail(mDatas.get(position));
2019-05-18 23:02:33 +08:00
closeCurrentActitivty();
2019-04-02 17:41:53 +08:00
}
@Override
public void onItemLongClick(View view, int position)
{
// initDialog(position);
// mAdapter.removeData(position);
}
@Override
public void onLinearOutClick(View view, int bookId,int llId) {
// Toast.makeText(activity, "book "+ bookId + " clicked", Toast.LENGTH_SHORT).show();
// showBookDetail( mData.get(bookId));
}
});
return mAdapter;
}
2019-04-12 23:02:31 +08:00
void showBookDetail(Novel book) {
2019-06-01 22:01:34 +08:00
List<Activity> acts = application.getActivityList();
for(Activity activity :acts){
if(activity instanceof BookActivity){
activity.finish();
break;
}
}
2019-04-02 17:41:53 +08:00
2019-04-12 23:02:31 +08:00
Intent intent = new Intent(this, BookActivity.class);
intent.putExtra(BookActivity.EXTRA_BOOK,book);
startActivity(intent);
}
2019-04-02 17:41:53 +08:00
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if(item.getItemId()==android.R.id.home){ //拦截toolbar 返回事件
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
2019-04-03 16:21:00 +08:00
protected List<Novel> getFakeData(int max ){
List<Novel> mDatas = new ArrayList<Novel>();
2019-04-02 17:41:53 +08:00
for (int i = 0; i <max; i++)
{
2019-04-03 16:21:00 +08:00
Novel bk = new Novel();
2019-04-02 17:41:53 +08:00
bk.setAuthor("金庸");
2019-04-05 23:59:31 +08:00
bk.setName("射雕英雄传" +(char)i);
2019-04-03 16:21:00 +08:00
bk.setNovelType("武侠");
bk.setDesc("南宋时期的武林故事南宋时期的武林故事南宋时期的武林故事南宋时期的武林故事南宋时期的武林故事南宋时期的武林故事南宋时期的武林故事南宋时期的武林故事南宋时期的武林故事南宋时期的武林故事南宋时期的武林故事");
2019-04-02 17:41:53 +08:00
mDatas.add(bk);
}
return mDatas;
}
2019-04-21 10:57:20 +08:00
public abstract void fillData();
2019-05-27 23:11:41 +08:00
protected static final int MSG_VERSION_LATEST =4;
protected static final int MSG_VERSION_FAILE =5;
2019-04-21 10:57:20 +08:00
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
int wt = msg.what;
if (msg.what == 1) {
fillData();
} else if (msg.what == 2) //
{
2019-04-02 17:41:53 +08:00
2019-04-21 10:57:20 +08:00
Toast.makeText(Activity_base.this, " 请求失败", Toast.LENGTH_LONG).show();
} else if (msg.what == 3) {
Toast.makeText(Activity_base.this, " ", Toast.LENGTH_LONG).show();
2019-05-27 23:11:41 +08:00
} else if (msg.what == MSG_VERSION_LATEST) {
Toast.makeText(Activity_base.this, "已是最新版本", Toast.LENGTH_LONG).show();
}else if (msg.what == MSG_VERSION_FAILE) {
Toast.makeText(Activity_base.this, "版本检查失败", Toast.LENGTH_LONG).show();
2019-04-21 10:57:20 +08:00
}
hideProgress();
}
};
2019-04-02 17:41:53 +08:00
2019-04-20 00:26:49 +08:00
2019-04-02 17:41:53 +08:00
class MyViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.title)
TextView tvTitle;
@BindView(R.id.author)
TextView tvAuthor;
@BindView(R.id.category)
TextView tvCate;
@BindView(R.id.desc)
TextView tvDesc;
@Nullable
@BindView(R.id.btnItemDelete)
Button btnDelete;
public MyViewHolder(View view) {
super(view);
ButterKnife.bind(this, view);
//tvTitle = (TextView) view.findViewById(R.id.title);
// tvAuthor = (TextView) view.findViewById(R.id.author);
}
}
2019-04-11 18:05:41 +08:00
public void showProgressDialog(boolean flag, String message) {
2019-04-02 17:41:53 +08:00
if (mProgressDialog == null) {
mProgressDialog = new ProgressDialog(this);
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
2019-05-24 00:33:30 +08:00
mProgressDialog.setCancelable(true);
2019-04-02 17:41:53 +08:00
mProgressDialog.setCanceledOnTouchOutside(false);
mProgressDialog.setMessage(message);
}
2019-05-13 00:18:07 +08:00
if(NetUtil.isNetworkConnected())
2019-04-02 17:41:53 +08:00
mProgressDialog.show();
}
public void hideProgress() {
if (mProgressDialog == null)
return;
if (mProgressDialog.isShowing()) {
mProgressDialog.dismiss();
}
}
/**
* 检查是否拥有权限
* @param thisActivity
* @param permission
* @param requestCode
* @param errorText
*/
protected void checkPermission (Activity thisActivity, String permission, int requestCode, String errorText) {
2019-05-25 23:57:12 +08:00
CommonUtil.checkPermission(thisActivity,permission,requestCode,errorText);
2019-04-02 17:41:53 +08:00
}
2019-04-11 18:05:41 +08:00
protected void loadImageView(String url, ImageView imageView){
ImageUtil.loadImage( this, url , imageView);
}
2019-04-02 17:41:53 +08:00
2019-05-11 23:21:57 +08:00
public void checkUpdate(boolean isSilence){
UpdateManager manager = new UpdateManager(this);
if(isSilence)
manager.checkUpdateSilence();
else
manager.checkUpdate();
}
2019-05-28 23:57:05 +08:00
// 添加Activity方法
public void addActivity() {
application.addActivity_(oContext);// 调用myApplication的添加Activity方法
}
2019-04-02 17:41:53 +08:00
2019-05-28 23:57:05 +08:00
//销毁当个Activity方法
public void removeActivity() {
application.removeActivity_(oContext);// 调用myApplication的销毁单个Activity方法
}
2019-04-02 17:41:53 +08:00
2019-05-28 23:57:05 +08:00
//销毁所有Activity方法
public void removeALLActivity() {
application.removeALLActivity_();// 调用myApplication的销毁所有Activity方法
}
2019-04-02 17:41:53 +08:00
2019-05-28 23:57:05 +08:00
@Override
public void finish() {
removeActivity();
super.finish();
}
2019-04-02 17:41:53 +08:00
2019-06-01 22:01:34 +08:00
//------ 头条 ad -----
AQuery2 mAQuery;
Button mCreativeButton;
TTAdNative mTTAdNative;
void initAD_TouTiao(){
2019-06-04 00:13:32 +08:00
if(Constants.SHOWAD)
try {
mTTAdNative = TTAdManagerHolder.get().createAdNative(this);
//step3:(可选,强烈建议在合适的时机调用):申请部分权限如read_phone_state,防止获取不了imei时候下载类广告没有填充的问题。
TTAdManagerHolder.get().requestPermissionIfNecessary(this);
this.mAQuery = new AQuery2(this);
}catch (Exception er){
Log.e(TAG, "initAD_TouTiao: ", er);
}
}
TTAdNative getTTAdNative(){
if(mTTAdNative== null){
if(Constants.SHOWAD){
TTAdManagerHolder.init(MyApp.applicationContext);
initAD_TouTiao();
}
}
return mTTAdNative;
2019-06-01 22:01:34 +08:00
}
2019-06-04 00:13:32 +08:00
//----toutiao ad ----
boolean mShowAd =false;
2019-06-01 22:01:34 +08:00
public void loadBannerAd(FrameLayout bannerContainer, String codeId, int width, int height) {
//step4:创建广告请求参数AdSlot,具体参数含义参考文档
2019-06-04 00:13:32 +08:00
if(!Constants.SHOWAD || getTTAdNative()==null ){return;}
2019-06-01 22:01:34 +08:00
/* if(height >390){
width =(int)(height*1.78);
if(width > Constants.SCREEN_WIDTH_PIX-50 ){
width= Constants.SCREEN_WIDTH_PIX-50;
height =(int)(width/1.78);
}
}else if(height >150){
width =(int)(height*1.78);
}*/
2019-06-04 00:13:32 +08:00
// width =690;
2019-06-01 22:01:34 +08:00
//height=150;
2019-06-04 00:13:32 +08:00
// height=height > 500 ? 500: height;
2019-06-01 22:01:34 +08:00
Log.d(TAG, String.format("loadBannerAd:finial width %s, height %s ",width,height));
AdSlot adSlot = new AdSlot.Builder()
.setCodeId(codeId) //广告位id
.setSupportDeepLink(true)
.setImageAcceptedSize(width, height)
.build();
//step5:请求广告,对请求回调的广告作渲染处理
2019-06-04 00:13:32 +08:00
getTTAdNative().loadBannerAd(adSlot, new TTAdNative.BannerAdListener() {
2019-06-01 22:01:34 +08:00
@Override
public void onError(int code, String message) {
// TToast.show(oContext, "load error : " + code + ", " + message);
Log.e(TAG, String.format("loadBannerAd:code %s, message %s ", code,message));
bannerContainer.removeAllViews();
2019-06-04 00:13:32 +08:00
// bannerContainer.setVisibility(View.GONE);
2019-06-01 22:01:34 +08:00
}
@Override
public void onBannerAdLoad(final TTBannerAd ad) {
2019-06-04 00:13:32 +08:00
if (ad == null ) {
2019-06-01 22:01:34 +08:00
return;
}
View bannerView = ad.getBannerView();
if (bannerView == null) {
return;
}
//设置轮播的时间间隔 间隔在30s到120秒之间的值不设置默认不轮播
ad.setSlideIntervalTime(30 * 1000);
bannerContainer.removeAllViews();
bannerContainer.addView(bannerView);
2019-06-04 00:13:32 +08:00
// bannerContainer.setVisibility(View.VISIBLE);
Log.d(TAG, "loadBannerAd: set banner VISIBLE");
// mTTAdNative.loadBannerAd(adSlot,null);
2019-06-01 22:01:34 +08:00
//设置广告互动监听回调
ad.setBannerInteractionListener(new TTBannerAd.AdInteractionListener() {
@Override
public void onAdClicked(View view, int type) {
// TToast.show(oContext, "广告被点击");
}
@Override
public void onAdShow(View view, int type) {
// TToast.show(oContext, "广告展示");
}
});
//(可选)设置下载类广告的下载监听
bindDownloadListener(ad);
//在banner中显示网盟提供的dislike icon有助于广告投放精准度提升
ad.setShowDislikeIcon(new TTAdDislike.DislikeInteractionCallback() {
@Override
public void onSelected(int position, String value) {
// TToast.show(oContext, "点击 " + value);
//用户选择不喜欢原因后,移除广告展示
bannerContainer.removeAllViews();
}
@Override
public void onCancel() {
// TToast.show(oContext, "点击取消 ");
}
});
//获取网盟dislike dialog您可以在您应用中本身自定义的dislike icon 按钮中设置 mTTAdDislike.showDislikeDialog();
/*mTTAdDislike = ad.getDislikeDialog(new TTAdDislike.DislikeInteractionCallback() {
@Override
public void onSelected(int position, String value) {
TToast.show(mContext, "点击 " + value);
}
@Override
public void onCancel() {
TToast.show(mContext, "点击取消 ");
}
});
if (mTTAdDislike != null) {
XXX.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mTTAdDislike.showDislikeDialog();
}
});
} */
}
});
}
private boolean mHasShowDownloadActive = false;
private void bindDownloadListener(TTBannerAd ad) {
ad.setDownloadListener(new TTAppDownloadListener() {
@Override
public void onIdle() {
// TToast.show(oContext, "点击图片开始下载", Toast.LENGTH_LONG);
}
@Override
public void onDownloadActive(long totalBytes, long currBytes, String fileName, String appName) {
if (!mHasShowDownloadActive) {
mHasShowDownloadActive = true;
// TToast.show(oContext, "下载中,点击图片暂停", Toast.LENGTH_LONG);
}
}
@Override
public void onDownloadPaused(long totalBytes, long currBytes, String fileName, String appName) {
// TToast.show(oContext, "下载暂停,点击图片继续", Toast.LENGTH_LONG);
}
@Override
public void onDownloadFailed(long totalBytes, long currBytes, String fileName, String appName) {
// TToast.show(oContext, "下载失败,点击图片重新下载", Toast.LENGTH_LONG);
}
@Override
public void onInstalled(String fileName, String appName) {
// TToast.show(oContext, "安装完成,点击图片打开", Toast.LENGTH_LONG);
}
@Override
public void onDownloadFinished(long totalBytes, String fileName, String appName) {
// TToast.show(oContext, "点击图片安装", Toast.LENGTH_LONG);
}
});
}
//-------------native toutiao ad
void loadNativeBannerAd(FrameLayout bannerContainer,String codeId) {
//step4:创建广告请求参数AdSlot,注意其中的setNativeAdtype方法具体参数含义参考文档
2019-06-04 00:13:32 +08:00
if(!Constants.SHOWAD || getTTAdNative()==null ){
return;
}
2019-06-01 22:01:34 +08:00
if(bannerContainer==null) return;
final AdSlot adSlot = new AdSlot.Builder()
.setCodeId(codeId)
.setSupportDeepLink(true)
.setImageAcceptedSize(690, 388)
.setNativeAdType(AdSlot.TYPE_BANNER) //请求原生广告时候请务必调用该方法设置参数为TYPE_BANNER或TYPE_INTERACTION_AD
.setAdCount(1)
.build();
//step5:请求广告,对请求回调的广告作渲染处理
2019-06-04 00:13:32 +08:00
getTTAdNative().loadNativeAd(adSlot, new TTAdNative.NativeAdListener() {
2019-06-01 22:01:34 +08:00
@Override
public void onError(int code, String message) {
// TToast.show(oContext, "load error : " + code + ", " + message);
Log.e(TAG, "loadBannerAd: " + code + ", " + message);
}
@Override
public void onNativeAdLoad(List<TTNativeAd> ads) {
2019-06-04 00:13:32 +08:00
if (ads.get(0) == null||!mShowAd) {
2019-06-01 22:01:34 +08:00
return;
}
View bannerView = LayoutInflater.from(oContext).inflate(R.layout.ad_toutiao_native_ad , bannerContainer, false);
if (bannerView == null) {
return;
}
if (mCreativeButton != null) {
//防止内存泄漏
mCreativeButton = null;
}
bannerContainer.removeAllViews();
bannerContainer.addView(bannerView);
2019-06-04 00:13:32 +08:00
// bannerContainer.setVisibility(View.VISIBLE);
Log.d(TAG, "loadBannerAd: set banner VISIBLE,mShowAd " +mShowAd);
2019-06-01 22:01:34 +08:00
//绑定原生广告的数据
setAdData(bannerContainer,bannerView, ads.get(0));
2019-06-04 00:13:32 +08:00
// mTTAdNative.loadNativeAd(adSlot,null);
2019-06-01 22:01:34 +08:00
}
});
}
@SuppressWarnings("RedundantCast")
private void setAdData(FrameLayout bannerContainer,View nativeView, TTNativeAd nativeAd) {
((TextView) nativeView.findViewById(R.id.tv_native_ad_title)).setText(nativeAd.getTitle());
((TextView) nativeView.findViewById(R.id.tv_native_ad_desc)).setText(nativeAd.getDescription());
ImageView imgDislike = nativeView.findViewById(R.id.img_native_dislike);
bindDislikeAction( bannerContainer,nativeAd, imgDislike);
if (nativeAd.getImageList() != null && !nativeAd.getImageList().isEmpty()) {
TTImage image = nativeAd.getImageList().get(0);
if (image != null && image.isValid()) {
mAQuery.id(nativeView.findViewById(R.id.iv_native_image)).image(image.getImageUrl());
}
}
TTImage icon = nativeAd.getIcon();
if (icon != null && icon.isValid()) {
ImageOptions options = new ImageOptions();
mAQuery.id((nativeView.findViewById(R.id.iv_native_icon))).image(icon.getImageUrl(), options);
}
mCreativeButton = (Button) nativeView.findViewById(R.id.btn_native_creative);
//可根据广告类型,为交互区域设置不同提示信息
switch (nativeAd.getInteractionType()) {
case TTAdConstant.INTERACTION_TYPE_DOWNLOAD:
//如果初始化ttAdManager.createAdNative(getApplicationContext())没有传入activity 则需要在此传activity否则影响使用Dislike逻辑
nativeAd.setActivityForDownloadApp(this);
mCreativeButton.setVisibility(View.VISIBLE);
nativeAd.setDownloadListener(mDownloadListener); // 注册下载监听器
break;
case TTAdConstant.INTERACTION_TYPE_DIAL:
mCreativeButton.setVisibility(View.VISIBLE);
mCreativeButton.setText("立即拨打");
break;
case TTAdConstant.INTERACTION_TYPE_LANDING_PAGE:
case TTAdConstant.INTERACTION_TYPE_BROWSER:
mCreativeButton.setVisibility(View.VISIBLE);
mCreativeButton.setText("查看详情");
break;
default:
mCreativeButton.setVisibility(View.GONE);
// TToast.show(oContext, "交互类型异常");
}
//可以被点击的view, 也可以把nativeView放进来意味整个广告区域可被点击
List<View> clickViewList = new ArrayList<>();
clickViewList.add(nativeView);
//触发创意广告的view点击下载或拨打电话
List<View> creativeViewList = new ArrayList<>();
//如果需要点击图文区域也能进行下载或者拨打电话动作请将图文区域的view传入
//creativeViewList.add(nativeView);
creativeViewList.add(mCreativeButton);
//重要! 这个涉及到广告计费必须正确调用。convertView必须使用ViewGroup。
nativeAd.registerViewForInteraction((ViewGroup) nativeView, clickViewList, creativeViewList, imgDislike, new TTNativeAd.AdInteractionListener() {
@Override
public void onAdClicked(View view, TTNativeAd ad) {
if (ad != null) {
// TToast.show(oContext, "广告" + ad.getTitle() + "被点击");
}
}
@Override
public void onAdCreativeClick(View view, TTNativeAd ad) {
if (ad != null) {
// TToast.show(oContext, "广告" + ad.getTitle() + "被创意按钮被点击");
}
}
@Override
public void onAdShow(TTNativeAd ad) {
if (ad != null) {
// TToast.show(oContext, "广告" + ad.getTitle() + "展示");
}
}
});
}
//接入网盟的dislike 逻辑,有助于提示广告精准投放度
private void bindDislikeAction(FrameLayout bannerContainer,TTNativeAd ad, View dislikeView) {
final TTAdDislike ttAdDislike = ad.getDislikeDialog(this);
if (ttAdDislike != null) {
ttAdDislike.setDislikeInteractionCallback(new TTAdDislike.DislikeInteractionCallback() {
@Override
public void onSelected(int position, String value) {
bannerContainer.removeAllViews();
}
@Override
public void onCancel() {
}
});
}
dislikeView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (ttAdDislike != null)
ttAdDislike.showDislikeDialog();
}
});
}
2019-04-02 17:41:53 +08:00
2019-06-01 22:01:34 +08:00
private final TTAppDownloadListener mDownloadListener = new TTAppDownloadListener() {
@Override
public void onIdle() {
if (mCreativeButton != null) {
mCreativeButton.setText("开始下载");
}
}
@Override
public void onDownloadActive(long totalBytes, long currBytes, String fileName, String appName) {
if (mCreativeButton != null) {
if (totalBytes <= 0L) {
mCreativeButton.setText("下载中 percent: 0");
} else {
mCreativeButton.setText("下载中 percent: " + (currBytes * 100 / totalBytes));
}
}
}
@Override
public void onDownloadPaused(long totalBytes, long currBytes, String fileName, String appName) {
if (mCreativeButton != null) {
mCreativeButton.setText("下载暂停 percent: " + (currBytes * 100 / totalBytes));
}
}
@Override
public void onDownloadFailed(long totalBytes, long currBytes, String fileName, String appName) {
if (mCreativeButton != null) {
mCreativeButton.setText("重新下载");
}
}
@Override
public void onInstalled(String fileName, String appName) {
if (mCreativeButton != null) {
mCreativeButton.setText("点击打开");
}
}
@Override
public void onDownloadFinished(long totalBytes, String fileName, String appName) {
if (mCreativeButton != null) {
mCreativeButton.setText("点击安装");
}
}
};
2019-04-02 17:41:53 +08:00
2019-06-03 00:32:52 +08:00
public TTAdNative getAdNative(){
return mTTAdNative;
}
2019-06-04 00:13:32 +08:00
void loadInteractionAd(String codeId) {
//step4:创建插屏广告请求参数AdSlot,具体参数含义参考文档
if(getAdNative()==null){
return;
}
AdSlot adSlot = new AdSlot.Builder()
.setCodeId(codeId)
.setSupportDeepLink(true)
.setImageAcceptedSize(600, 600) //根据广告平台选择的尺寸,传入同比例尺寸
.build();
//step5:请求广告,调用插屏广告异步请求接口
getAdNative().loadInteractionAd(adSlot, new TTAdNative.InteractionAdListener() {
@Override
public void onError(int code, String message) {
Log.e(TAG, String.format("loadInteractionAd onError: code %s ,message %s",code,message) );
}
@Override
public void onInteractionAdLoad(TTInteractionAd ttInteractionAd) {
// TToast.show(getApplicationContext(), "type: " + ttInteractionAd.getInteractionType());
ttInteractionAd.setAdInteractionListener(new TTInteractionAd.AdInteractionListener() {
@Override
public void onAdClicked() {
Log.d(TAG, "被点击");
// TToast.show(mContext, "广告被点击");
}
@Override
public void onAdShow() {
Log.d(TAG, "被展示");
// TToast.show(mContext, "广告被展示");
}
@Override
public void onAdDismiss() {
Log.d(TAG, "插屏广告消失");
// TToast.show(mContext, "广告消失");
}
});
//如果是下载类型的广告,可以注册下载状态回调监听
if (ttInteractionAd.getInteractionType() == TTAdConstant.INTERACTION_TYPE_DOWNLOAD) {
ttInteractionAd.setDownloadListener(new TTAppDownloadListener() {
@Override
public void onIdle() {
Log.d(TAG, "点击开始下载");
// TToast.show(mContext, "点击开始下载");
}
@Override
public void onDownloadActive(long totalBytes, long currBytes, String fileName, String appName) {
Log.d(TAG, "下载中");
// TToast.show(mContext, "下载中");
}
@Override
public void onDownloadPaused(long totalBytes, long currBytes, String fileName, String appName) {
Log.d(TAG, "下载暂停");
// TToast.show(mContext, "下载暂停");
}
2019-06-03 00:32:52 +08:00
2019-06-04 00:13:32 +08:00
@Override
public void onDownloadFailed(long totalBytes, long currBytes, String fileName, String appName) {
Log.d(TAG, "下载失败");
// TToast.show(mContext, "下载失败");
}
@Override
public void onDownloadFinished(long totalBytes, String fileName, String appName) {
Log.d(TAG, "下载完成");
// TToast.show(mContext, "下载完成");
}
@Override
public void onInstalled(String fileName, String appName) {
Log.d(TAG, "安装完成");
// TToast.show(mContext, "安装完成");
}
});
}
//弹出插屏广告
ttInteractionAd.showInteractionAd(oContext);
}
});
}
2019-04-02 17:41:53 +08:00
}