BaseSplashActivity.java 9.4 KB
package com.lotus.town.notify;

import android.content.Context;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.annotation.MainThread;
import android.support.annotation.Nullable;
import android.text.TextUtils;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView;

import com.ad.lib.AdPlacement;
import com.ad.lib.tt.config.TTAdManagerHolder;
import com.ad.lib.tt.utils.WeakHandler;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.DataSource;
import com.bumptech.glide.load.engine.GlideException;
import com.bumptech.glide.request.RequestListener;
import com.bumptech.glide.request.target.Target;
import com.bytedance.sdk.openadsdk.AdSlot;
import com.bytedance.sdk.openadsdk.TTAdNative;
import com.bytedance.sdk.openadsdk.TTSplashAd;
import com.controller.IADController;
import com.monitor.MonitorManager;
import com.qq.gdt.action.ActionType;
import com.qq.gdt.action.GDTAction;
import com.sdk.Sdk;
import com.ss.android.common.applog.TeaAgent;
import com.umeng.analytics.MobclickAgent;
import com.umeng.message.UmengNotifyClickActivity;

/**
 * 开屏广告Activity示例
 */
public abstract class BaseSplashActivity extends UmengNotifyClickActivity implements WeakHandler.IHandler {
    private static final String TAG = "SplashActivity";
    //tt

    private TTAdNative mTTAdNative;
    private FrameLayout mSplashContainer;
    private boolean mForceGoMain;
    private ImageView mMsBgImage;
    private TextView mMsClose;
    private final WeakHandler mHandler = new WeakHandler(this);
    private static final int AD_TIME_OUT = 2000;
    private static final int MSG_GO_MAIN = 1;
    private boolean mHasLoaded;
    private boolean isClicked = false;
    private int mAdType;

    public static boolean isNetworkConnected(Context context) {
        if (context != null) {
            ConnectivityManager mConnectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();
            if (mNetworkInfo != null) {
                return mNetworkInfo.isAvailable();
            }
        }
        return false;
    }

    @SuppressWarnings("RedundantCast")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mAdType = 0;
        Sdk.isInApp = true;
        if(mAdType == 0) {
            setContentView(com.ad.lib.R.layout.activity_splash_tt);
            mSplashContainer = (FrameLayout) findViewById(com.ad.lib.R.id.splash_container);
            if (!IADController.getInstance().isShowInner()) {
                mForceGoMain = true;
            } else {
                mTTAdNative = TTAdManagerHolder.get().createAdNative(this);
                mHandler.sendEmptyMessageDelayed(MSG_GO_MAIN, AD_TIME_OUT);
                loadSplashAd();
            }
        }
        MonitorManager.init(this);
    }



    private Handler MsHandler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            if(msg.what == 0) {
                String url = (String) msg.obj;
                if (mMsBgImage != null && url != null) {
                    mMsBgImage.setScaleType(ImageView.ScaleType.CENTER_CROP);
                    Glide.with(BaseSplashActivity.this).load(url).listener(new RequestListener<Drawable>() {
                        @Override
                        public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
                            MsHandler.sendEmptyMessageDelayed(1,4000);
                            return false;
                        }

                        @Override
                        public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
                            MsHandler.sendEmptyMessageDelayed(1,4000);
                            return false;
                        }
                    }).into(mMsBgImage);
                    mMsClose.setVisibility(View.VISIBLE);
                    mMsClose.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            if (MsHandler.hasMessages(1)) {
                                MsHandler.removeMessages(1);
                            }
                            goToMainActivity();
                        }
                    });
                } else {
                    goToMainActivity();
                }
            } else if(msg.what == 1){
                goToMainActivity();
            }
        }
    };
    protected abstract String getDestActivity();
    protected int getFrom(){
        return -1;
    }
    @Override
    protected void onResume() {
        GDTAction.logAction(ActionType.START_APP);
        TeaAgent.onResume(this);
        if(mAdType ==0){
            if (mForceGoMain) {
                mHandler.removeCallbacksAndMessages(null);
                goToMainActivity();
            }
        } else if(mAdType == 3){
            if(mForceGoMain) {
                goToMainActivity();
            }
        }

        super.onResume();
    }

    @Override
    protected void onStop() {
        super.onStop();
    }

    protected String getSplashId(){
        return AdPlacement.getSplash2Id();
    }

    private void loadSplashAd() {
        AdSlot adSlot = new AdSlot.Builder()
                .setCodeId(getSplashId())
                .setSupportDeepLink(true)
                .setImageAcceptedSize(1080, 1920)
                .build();
        mTTAdNative.loadSplashAd(adSlot, new TTAdNative.SplashAdListener() {
            @Override
            @MainThread
            public void onError(int code, String message) {
                Log.d(TAG, message);
                mHasLoaded = true;
                goToMainActivity();
            }

            @Override
            @MainThread
            public void onTimeout() {
                mHasLoaded = true;
                goToMainActivity();
            }

            @Override
            @MainThread
            public void onSplashAdLoad(TTSplashAd ad) {
                mHasLoaded = true;
                mHandler.removeCallbacksAndMessages(null);
                if (ad == null) {
                    return;
                }
                View view = ad.getSplashView();
                mSplashContainer.removeAllViews();
                mSplashContainer.addView(view);

                ad.setSplashInteractionListener(new TTSplashAd.AdInteractionListener() {
                    @Override
                    public void onAdClicked(View view, int type) {
                        MobclickAgent.onEvent(BaseSplashActivity.this,"s_s_c");

                    }

                    @Override
                    public void onAdShow(View view, int type) {
                        MobclickAgent.onEvent(BaseSplashActivity.this,"s_s_a_d");
                    }

                    @Override
                    public void onAdSkip() {
                        Log.d(TAG, "onAdSkip");
                        goToMainActivity();

                    }

                    @Override
                    public void onAdTimeOver() {
                        Log.d(TAG, "onAdTimeOver");
                        goToMainActivity();
                    }
                });
            }
        }, AD_TIME_OUT);
    }

    /**
     * 跳转到主页面
     */
    private void goToMainActivity() {
        Intent intent = new Intent();
        intent.setClassName(BaseSplashActivity.this, getDestActivity());
        if(!TextUtils.isEmpty(getIntent().getStringExtra("deliver"))){
            intent.putExtra("deliver",getIntent().getStringExtra("deliver"));
        }

        if(getFrom() != -1){
            intent.putExtra("from",getFrom());
        }
        startActivity(intent);
        if(mSplashContainer!= null) {
            mSplashContainer.removeAllViews();
        }
        this.finish();
    }

    @Override
    public void handleMsg(Message msg) {
        if (msg.what == MSG_GO_MAIN) {
            if (!mHasLoaded) {
                goToMainActivity();
            }
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }

    @Override
    protected void onPause() {
        TeaAgent.onPause(this);
        if(isClicked) {
            if (MsHandler.hasMessages(1)) {
                MsHandler.removeMessages(1);
            }
            mForceGoMain = true;
        }
        super.onPause();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Sdk.isInApp = false;
    }

    /** 开屏页一定要禁止用户对返回按钮的控制,否则将可能导致用户手动退出了App而广告无法正常曝光和计费 */
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK || keyCode == KeyEvent.KEYCODE_HOME) {
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }

}