package com.yeshi.ec.rebate.myapplication.ui;
|
|
import android.Manifest;
|
import android.annotation.TargetApi;
|
import android.app.Activity;
|
import android.app.ActivityManager;
|
import android.content.Context;
|
import android.content.Intent;
|
import android.content.SharedPreferences;
|
import android.content.pm.PackageInfo;
|
import android.content.pm.PackageManager;
|
import android.graphics.Color;
|
import android.net.Uri;
|
import android.os.Build;
|
import android.os.Bundle;
|
import android.os.Handler;
|
import android.os.Looper;
|
import android.provider.Settings;
|
import android.text.TextUtils;
|
import android.util.Log;
|
import android.view.KeyEvent;
|
import android.view.View;
|
import android.view.ViewGroup;
|
import android.view.Window;
|
import android.view.WindowManager;
|
import android.widget.ImageView;
|
import android.widget.LinearLayout;
|
import android.widget.TextView;
|
import android.widget.Toast;
|
|
import com.alibaba.baichuan.android.trade.AlibcTradeSDK;
|
import com.alibaba.baichuan.android.trade.callback.AlibcTradeInitCallback;
|
import com.alibaba.baichuan.trade.biz.core.taoke.AlibcTaokeParams;
|
import com.google.gson.Gson;
|
import com.huawei.android.hms.agent.HMSAgent;
|
import com.huawei.android.hms.agent.common.handler.ConnectHandler;
|
import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;
|
import com.qq.e.ads.splash.SplashAD;
|
import com.qq.e.ads.splash.SplashADListener;
|
import com.qq.e.comm.managers.GDTADManager;
|
import com.qq.e.comm.util.AdError;
|
import com.umeng.analytics.MobclickAgent;
|
import com.wpc.library.okhttp.OkHttpUtils;
|
import com.wpc.library.util.MobileUtil;
|
import com.wpc.library.util.cache.DiskLruCache;
|
import com.wpc.library.util.common.StorageUtils;
|
import com.xiaomi.mipush.sdk.MiPushClient;
|
import com.yeshi.ec.rebate.myapplication.BasicTextHttpResponseHandler;
|
import com.yeshi.ec.rebate.myapplication.BuXinConstant;
|
import com.yeshi.ec.rebate.myapplication.R;
|
import com.yeshi.ec.rebate.myapplication.ShoppingApi;
|
import com.yeshi.ec.rebate.myapplication.entity.user.GDTAdInfo;
|
import com.yeshi.ec.rebate.myapplication.ui.guidepages.GuidePages;
|
import com.yeshi.ec.rebate.myapplication.ui.main.MainActivity;
|
import com.yeshi.ec.rebate.myapplication.util.AdUtil;
|
import com.yeshi.ec.rebate.myapplication.util.Constant;
|
import com.yeshi.ec.rebate.myapplication.util.PermissionsActivity;
|
import com.yeshi.ec.rebate.myapplication.util.PermissionsChecker;
|
import com.yeshi.ec.rebate.myapplication.util.RecordImageTextVideo;
|
import com.yeshi.ec.rebate.myapplication.util.SystemParamsUtil;
|
import com.yeshi.ec.rebate.myapplication.util.ToolUtil;
|
|
import org.apache.http.Header;
|
import org.json.JSONArray;
|
import org.json.JSONObject;
|
|
import java.io.File;
|
import java.io.IOException;
|
import java.lang.reflect.Field;
|
import java.util.ArrayList;
|
import java.util.HashMap;
|
import java.util.List;
|
|
import okhttp3.Call;
|
|
/**
|
* Created by weikou2015 on 2017/2/20.
|
*/
|
public class SplashActivity extends BaseActivity implements SplashADListener {
|
// 所需的全部权限
|
static final String[] PERMISSIONS = new String[]{
|
Manifest.permission.READ_PHONE_STATE};//, Manifest.permission.READ_EXTERNAL_STORAGE,
|
// Manifest.permission.WRITE_EXTERNAL_STORAGE};
|
private static final int REQUEST_CODE = 0; // 请求码
|
private PermissionsChecker mPermissionsChecker; // 权限检测器
|
ImageView iv_splash;
|
private DiskLruCache cache;
|
|
private String tag1 = "systemclient/getsystemclientparams";
|
private String tag2 = "navbar/getHomeItems";
|
private String tag3 = "recommend/getRecommendIndex";
|
|
|
//腾讯广告
|
private SplashAD splashAD;
|
private ViewGroup container;
|
private TextView skipView;
|
private static final String SKIP_TEXT = "%d | 关闭";
|
|
public boolean canJump = false;
|
private boolean needStartDemoList = true;
|
|
private LinearLayout ll_ad;
|
private LinearLayout ll_splash;
|
|
/**
|
* 为防止无广告时造成视觉上类似于"闪退"的情况,设定无广告时页面跳转根据需要延迟一定时间,demo
|
* 给出的延时逻辑是从拉取广告开始算开屏最少持续多久,仅供参考,开发者可自定义延时逻辑,如果开发者采用demo
|
* 中给出的延时逻辑,也建议开发者考虑自定义minSplashTimeWhenNoAD的值(单位ms)
|
**/
|
private int minSplashTimeWhenNoAD = 2000;
|
/**
|
* 记录拉取广告的时间
|
*/
|
private long fetchSplashADTime = 0;
|
private Handler handler = new Handler(Looper.getMainLooper());
|
|
@Override
|
protected void onCreate(Bundle savedInstanceState) {
|
super.onCreate(savedInstanceState);
|
setContentView(R.layout.activity_splash);
|
initView();
|
setShowRecommend(false);
|
// TopStatusSettings.setStatusViewAndDeepColor(this);
|
ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
|
ActivityManager.RunningTaskInfo info = manager.getRunningTasks(1).get(0);
|
int acitivitynum = info.numActivities;
|
if (acitivitynum > 1) {
|
finish();
|
}
|
|
/*同化顶部状态栏*/
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
Window window = getWindow();
|
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
|
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
|
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
|
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
|
window.setStatusBarColor(Color.TRANSPARENT);
|
//设置状态栏文字颜色及图标为深色
|
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
try {
|
Class decorViewClazz = Class.forName("com.android.internal.policy.DecorView");
|
Field field = decorViewClazz.getDeclaredField("mSemiTransparentStatusBarColor");
|
field.setAccessible(true);
|
field.setInt(getWindow().getDecorView(), Color.TRANSPARENT); //改为透明
|
} catch (Exception e) {
|
}
|
}
|
}
|
try {
|
cache = DiskLruCache.open(
|
new File(StorageUtils.getCacheDirectory(this)
|
.toString(), "http"), getVersionNum(this),
|
1, 1024 * 1024);
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
|
|
if (!AlibcTradeSDK.initState.isInitialized() && !AlibcTradeSDK.initState.isInitializing())
|
taobaoInit();
|
|
mPermissionsChecker = new PermissionsChecker(this);
|
iv_splash = findViewById(R.id.iv_splash);
|
|
/**
|
* SDK连接HMS
|
*/
|
if (MobileUtil.getDeviceBrand().equalsIgnoreCase("HUAWEI")
|
|| MobileUtil.getDeviceBrand().equalsIgnoreCase("HONOR")) {
|
HMSAgent.connect(this, new ConnectHandler() {
|
@Override
|
public void onConnect(int rst) {
|
// Toast.makeText(SplashActivity.this, "HMS connect end:" + rst, Toast.LENGTH_LONG).show();
|
Log.e("mResult", "HMS connect end:" + rst);
|
// getToken();
|
}
|
});
|
}
|
getSystemParams();
|
setGoodsIndex();
|
getHomeNavbar();
|
}
|
|
private void initView() {
|
ll_ad = findViewById(R.id.ll_ad);
|
ll_splash = findViewById(R.id.ll_splash);
|
initAD();
|
}
|
|
|
private void initAD() {
|
container = this.findViewById(R.id.splash_container);
|
skipView = findViewById(R.id.skip_view);
|
skipView.setVisibility(View.GONE);
|
}
|
|
private void loadAD() {
|
GDTAdInfo adInfo = AdUtil.getGDTADInfo(getApplicationContext());
|
if (adInfo == null) {
|
return;
|
}
|
|
if (Build.VERSION.SDK_INT >= 23) {
|
checkAndRequestPermission(adInfo.getSplashPid());
|
} else {
|
// 如果是Android6.0以下的机器,默认在安装时获得了所有权限,可以直接调用SDK
|
fetchSplashAD(this, container, skipView, adInfo.getSplashPid(), this, 0);
|
}
|
}
|
|
/**
|
* 显示广告
|
*/
|
private void showAd() {
|
ll_splash.setVisibility(View.GONE);
|
ll_ad.setVisibility(View.VISIBLE);
|
splashAD.fetchAndShowIn(container);
|
}
|
|
|
/**
|
* ----------非常重要----------
|
* <p>
|
* Android6.0以上的权限适配简单示例:
|
* <p>
|
* 如果targetSDKVersion >= 23,那么必须要申请到所需要的权限,再调用广点通SDK,否则广点通SDK不会工作。
|
* <p>
|
* Demo代码里是一个基本的权限申请示例,请开发者根据自己的场景合理地编写这部分代码来实现权限申请。
|
* 注意:下面的`checkSelfPermission`和`requestPermissions`方法都是在Android6.0的SDK中增加的API,如果您的App还没有适配到Android6.0以上,则不需要调用这些方法,直接调用广点通SDK即可。
|
*/
|
@TargetApi(Build.VERSION_CODES.M)
|
private void checkAndRequestPermission(String pid) {
|
List<String> lackedPermission = new ArrayList<String>();
|
if (!(checkSelfPermission(Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED)) {
|
lackedPermission.add(Manifest.permission.READ_PHONE_STATE);
|
}
|
|
// if (!(checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED)) {
|
// lackedPermission.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
|
// }
|
//
|
// if (!(checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED)) {
|
// lackedPermission.add(Manifest.permission.ACCESS_FINE_LOCATION);
|
// }
|
|
// 权限都已经有了,那么直接调用SDK
|
if (lackedPermission.size() == 0) {
|
fetchSplashAD(this, container, skipView, pid, this, 0);
|
} else {
|
// 请求所缺少的权限,在onRequestPermissionsResult中再看是否获得权限,如果获得权限就可以调用SDK,否则不要调用SDK。
|
String[] requestPermissions = new String[lackedPermission.size()];
|
lackedPermission.toArray(requestPermissions);
|
requestPermissions(requestPermissions, 1024);
|
}
|
}
|
|
private boolean hasAllPermissionsGranted(int[] grantResults) {
|
for (int grantResult : grantResults) {
|
if (grantResult == PackageManager.PERMISSION_DENIED) {
|
return false;
|
}
|
}
|
return true;
|
}
|
|
@Override
|
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
|
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
if (requestCode == 1024 && hasAllPermissionsGranted(grantResults)) {
|
GDTAdInfo adInfo = AdUtil.getGDTADInfo(getApplicationContext());
|
if(adInfo==null)
|
return;
|
fetchSplashAD(this, container, skipView, adInfo.getSplashPid(), this, 0);
|
} else {
|
// 如果用户没有授权,那么应该说明意图,引导用户去设置里面授权。
|
Toast.makeText(this, "应用缺少必要的权限!请点击\"权限\",打开所需要的权限。", Toast.LENGTH_LONG).show();
|
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
|
intent.setData(Uri.parse("package:" + getPackageName()));
|
startActivity(intent);
|
finish();
|
}
|
}
|
|
/**
|
* 拉取开屏广告,开屏广告的构造方法有3种,详细说明请参考开发者文档。
|
*
|
* @param activity 展示广告的activity
|
* @param adContainer 展示广告的大容器
|
* @param skipContainer 自定义的跳过按钮:传入该view给SDK后,SDK会自动给它绑定点击跳过事件。SkipView的样式可以由开发者自由定制,其尺寸限制请参考activity_splash.xml或者接入文档中的说明。
|
* @param posId 广告位ID
|
* @param adListener 广告状态监听器
|
* @param fetchDelay 拉取广告的超时时长:取值范围[3000, 5000],设为0表示使用广点通SDK默认的超时时长。
|
*/
|
|
|
private void fetchSplashAD(Activity activity, ViewGroup adContainer, View skipContainer, String posId, SplashADListener adListener, int fetchDelay) {
|
fetchSplashADTime = System.currentTimeMillis();
|
splashAD = new SplashAD(activity, posId, adListener, fetchDelay);
|
splashAD.preLoad();
|
}
|
|
private void taobaoInit() {
|
AlibcTradeSDK.asyncInit(SplashActivity.this.getApplication(), new AlibcTradeInitCallback() {
|
@Override
|
public void onSuccess() {
|
// AlibcTradeSDK.setTaokeParams(new AlibcTaokeParams(BuXinConstant.BAICHUAN_PID, "", null));
|
AlibcTaokeParams alibcTaokeParams = new AlibcTaokeParams("", "", "");
|
AlibcTradeSDK.setTaokeParams(alibcTaokeParams);
|
alibcTaokeParams.setPid(BuXinConstant.BAICHUAN_PID);
|
alibcTaokeParams.setAdzoneid(BuXinConstant.BAICHUAN_ADZONE_ID);
|
alibcTaokeParams.pid = BuXinConstant.BAICHUAN_PID;
|
alibcTaokeParams.adzoneid = BuXinConstant.BAICHUAN_ADZONE_ID;
|
alibcTaokeParams.extraParams = new HashMap<>();
|
alibcTaokeParams.extraParams.put("taokeAppkey", BuXinConstant.TAO_BAO_KE_KEY);
|
}
|
|
@Override
|
public void onFailure(int i, String s) {
|
MobclickAgent.reportError(SplashActivity.this, "ShoppingApplication---code:" + i + "---msg:" + s);
|
// Toast.makeText(application, "初始化失败!", Toast.LENGTH_LONG).show();
|
}
|
});
|
}
|
|
private boolean isHomeJump = true;//首页跳转判断
|
|
@Override
|
protected void onResume() {
|
super.onResume();
|
if (mPermissionsChecker.lacksPermissions(PERMISSIONS) && isHomeJump) {
|
isHomeJump = false;
|
startPermissionsActivity();
|
} else {
|
jumpActivitry();//跳转主页
|
}
|
|
if (canJump) {
|
next();
|
}
|
canJump = true;
|
}
|
|
@Override
|
protected void onPause() {
|
super.onPause();
|
canJump = false;
|
}
|
|
/**
|
* 跳转 主页
|
*/
|
private void jumpActivitry() {
|
if (shouldJumpGuide()) {//需要显示引导页
|
iv_splash.postDelayed(new Runnable() {
|
@Override
|
public void run() {
|
SharedPreferences sp = getSharedPreferences("user", MODE_PRIVATE);
|
if (!sp.getBoolean("doNotDisturb", false)
|
&& !(MobileUtil.getDeviceBrand().equalsIgnoreCase("HUAWEI") || MobileUtil.getDeviceBrand().equalsIgnoreCase("HONOR"))) {
|
if (MobileUtil.getDeviceBrand().equalsIgnoreCase("xiaomi")) {
|
ToolUtil.notDisturb(SplashActivity.this, false);
|
Log.e("eee", "inintPush: " + MiPushClient.getRegId(SplashActivity.this));
|
}
|
}
|
//开屏引导页 记录
|
if (shouldJumpGuide()) {
|
startActivity(new Intent(SplashActivity.this, GuidePages.class).putExtra("guid", 1));
|
SplashActivity.this.finish();
|
} else {
|
//跳转主页
|
jumpMainActivity();
|
}
|
finish();
|
}
|
}, 2000);
|
} else {//不需要显示引导页
|
|
//请求广告是否需要显示
|
ShoppingApi.getSplashAdConfig(getApplicationContext(), new BasicTextHttpResponseHandler() {
|
@Override
|
public void onSuccessPerfect(int statusCode, Header[] headers, JSONObject jsonObject) throws Exception {
|
super.onSuccessPerfect(statusCode, headers, jsonObject);
|
if (jsonObject.optInt("code") == 0) {
|
JSONObject data = jsonObject.optJSONObject("data");
|
if (data.optBoolean("show")) {//显示广告
|
JSONObject ad = data.optJSONObject("ad");
|
GDTAdInfo info = new Gson().fromJson(ad.toString(), GDTAdInfo.class);
|
if (info != null) {
|
AdUtil.saveGDTADInfo(getApplicationContext(), info);
|
GDTADManager.getInstance().initWith(SplashActivity.this, info.getAppId());
|
loadAD();
|
iv_splash.postDelayed(new Runnable() {
|
@Override
|
public void run() {
|
showAd();
|
}
|
}, 2000);
|
} else {
|
//延时2s跳转
|
iv_splash.postDelayed(new Runnable() {
|
@Override
|
public void run() {
|
jumpMainActivity();
|
}
|
}, 2000);
|
}
|
} else {//不显示
|
//延时2s跳转
|
iv_splash.postDelayed(new Runnable() {
|
@Override
|
public void run() {
|
jumpMainActivity();
|
}
|
}, 2000);
|
}
|
}
|
}
|
|
@Override
|
public void onFailure(int statusCode, Header[] headers, String jsonObject, Throwable e) {
|
super.onFailure(statusCode, headers, jsonObject, e);
|
iv_splash.postDelayed(new Runnable() {
|
@Override
|
public void run() {
|
jumpMainActivity();
|
}
|
}, 1500);
|
}
|
|
@Override
|
public void onFailure(Call call, IOException e) {
|
super.onFailure(call, e);
|
iv_splash.postDelayed(new Runnable() {
|
@Override
|
public void run() {
|
jumpMainActivity();
|
}
|
}, 1500);
|
}
|
});
|
}
|
}
|
|
private boolean shouldJumpGuide() {
|
return false;
|
// return getSharedPreferences("guide", MODE_PRIVATE).getInt("guidepage", 0) == 0 && !Constant.TEST;
|
}
|
|
//跳转到主页
|
private void jumpMainActivity() {
|
startActivity(new Intent(SplashActivity.this, MainActivity.class));
|
SplashActivity.this.finish();
|
}
|
|
|
@Override
|
protected void onDestroy() {
|
super.onDestroy();
|
OkHttpUtils.getInstance().cancelTag(tag1);
|
OkHttpUtils.getInstance().cancelTag(tag2);
|
OkHttpUtils.getInstance().cancelTag(tag3);
|
handler.removeCallbacksAndMessages(null);
|
}
|
|
private void startPermissionsActivity() {
|
PermissionsActivity.startActivityForResult(this, REQUEST_CODE, true, PERMISSIONS);
|
}
|
|
@Override
|
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
super.onActivityResult(requestCode, resultCode, data);
|
// 拒绝时, 关闭页面, 缺少主要权限, 无法运行
|
if (requestCode == REQUEST_CODE && resultCode == PermissionsActivity.PERMISSIONS_DENIED) {
|
// finish();
|
// jumpActivitry();//跳转主页
|
}
|
isHomeJump = false;
|
}
|
|
/**
|
* 系统补充参数请求
|
*/
|
private void getSystemParams() {
|
String uid = getSharedPreferences("user", Context.MODE_PRIVATE).getString("uid", "");
|
ShoppingApi.getSystemParams(SplashActivity.this, uid, new BasicTextHttpResponseHandler() {
|
@Override
|
public void onSuccessPerfect(int statusCode, Header[] headers, JSONObject jsonObject) throws Exception {
|
if (jsonObject.optString("code").equalsIgnoreCase("0")) {
|
SharedPreferences sp = getSharedPreferences("user", MODE_PRIVATE);
|
JSONArray array = jsonObject.optJSONObject("data").optJSONArray("systemClientParamsList");
|
SystemParamsUtil.saveParams(getApplicationContext(), array);
|
|
//记录优惠券 图文视频链接
|
RecordImageTextVideo textVideo = new RecordImageTextVideo(SplashActivity.this);
|
textVideo.isRecord(jsonObject);
|
}
|
}
|
|
@Override
|
public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {
|
super.onFailure(statusCode, headers, responseString, throwable);
|
}
|
});
|
}
|
|
private void getHomeNavbar() {
|
String uid = getSharedPreferences("user",
|
MODE_PRIVATE).getString("uid", "");
|
ShoppingApi.getHomeNavbar(this, uid,
|
new BasicTextHttpResponseHandler() {
|
|
@Override
|
public void onSuccessPerfect(int statusCode, Header[] headers, JSONObject jsonObject) throws Exception {
|
if (jsonObject.optString("code").equalsIgnoreCase("0")) {
|
DiskLruCache.Editor editor = cache
|
.edit(getKey("getFirstCategory"));
|
editor.set(0, jsonObject.optJSONObject("data")
|
.optJSONArray("listNavbar").toString());
|
editor.commit();
|
}
|
}
|
});
|
}
|
|
private void setGoodsIndex() {
|
String uid = getSharedPreferences("user", MODE_PRIVATE).getString("uid", "");
|
ShoppingApi.getRecommendIndex(this, uid, new BasicTextHttpResponseHandler() {
|
@Override
|
public void onFinish() {
|
super.onFinish();
|
}
|
|
@Override
|
public void onSuccessPerfect(int statusCode, Header[] headers, JSONObject jsonObject) throws Exception {
|
if (jsonObject.optString("code").equalsIgnoreCase("0")) {
|
|
//顶部banner
|
DiskLruCache.Editor editor0 = cache
|
.edit(getKey("BannerAd"));
|
editor0.set(0, jsonObject.optJSONObject("data").optJSONArray("topPicList").toString());
|
editor0.commit();
|
|
//9块9包邮
|
DiskLruCache.Editor editor1 = cache
|
.edit(getKey("arcArea"));
|
editor1.set(0, jsonObject.optJSONObject("data").optJSONObject("arcArea")
|
.optJSONArray("list").toString());
|
editor1.commit();
|
//活动专题3
|
DiskLruCache.Editor editor2 = cache
|
.edit(getKey("activityArea"));
|
editor2.set(0, jsonObject.optJSONObject("data")
|
.optJSONObject("activityArea").toString());
|
editor2.commit();
|
//活动专题4
|
DiskLruCache.Editor editor3 = cache
|
.edit(getKey("invitePicList"));
|
editor3.set(0, jsonObject.optJSONObject("data")
|
.optJSONArray("invitePicList").toString());
|
editor3.commit();
|
//活动专题5
|
DiskLruCache.Editor editor4 = cache
|
.edit(getKey("blockArea"));
|
editor4.set(0, jsonObject.optJSONObject("data").optJSONObject("blockArea")
|
.optJSONArray("list").toString());
|
editor4.commit();
|
}
|
}
|
|
});
|
}
|
|
|
private int getVersionNum(Context context) {
|
try {
|
PackageInfo pi = context.getPackageManager().getPackageInfo(
|
context.getPackageName(), 0);
|
return pi.versionCode;
|
} catch (PackageManager.NameNotFoundException e) {
|
e.printStackTrace();
|
return 1;
|
}
|
}
|
|
private String getKey(String method) {
|
return new Md5FileNameGenerator().generate(method);
|
}
|
|
|
@Override
|
public void onADPresent() {
|
Log.i("AD_DEMO", "SplashADPresent");
|
}
|
|
@Override
|
public void onADClicked() {
|
Log.i("AD_DEMO", "SplashADClicked clickUrl: "
|
+ (splashAD.getExt() != null ? splashAD.getExt().get("clickUrl") : ""));
|
}
|
|
/**
|
* 倒计时回调,返回广告还将被展示的剩余时间。
|
* 通过这个接口,开发者可以自行决定是否显示倒计时提示,或者还剩几秒的时候显示倒计时
|
*
|
* @param millisUntilFinished 剩余毫秒数
|
*/
|
@Override
|
public void onADTick(long millisUntilFinished) {
|
Log.i("AD_DEMO", "SplashADTick " + millisUntilFinished + "ms");
|
skipView.setText(String.format(SKIP_TEXT, Math.round(millisUntilFinished / 1000f)));
|
}
|
|
@Override
|
public void onADExposure() {
|
Log.i("AD_DEMO", "SplashADExposure");
|
}
|
|
@Override
|
public void onADDismissed() {
|
Log.i("AD_DEMO", "SplashADDismissed");
|
next();
|
}
|
|
@Override
|
public void onNoAD(AdError error) {
|
Log.i(
|
"AD_DEMO",
|
String.format("LoadSplashADFail, eCode=%d, errorMsg=%s", error.getErrorCode(),
|
error.getErrorMsg()));
|
/**
|
* 为防止无广告时造成视觉上类似于"闪退"的情况,设定无广告时页面跳转根据需要延迟一定时间,demo
|
* 给出的延时逻辑是从拉取广告开始算开屏最少持续多久,仅供参考,开发者可自定义延时逻辑,如果开发者采用demo
|
* 中给出的延时逻辑,也建议开发者考虑自定义minSplashTimeWhenNoAD的值
|
**/
|
long alreadyDelayMills = System.currentTimeMillis() - fetchSplashADTime;//从拉广告开始到onNoAD已经消耗了多少时间
|
long shouldDelayMills = alreadyDelayMills > minSplashTimeWhenNoAD ? 0 : minSplashTimeWhenNoAD
|
- alreadyDelayMills;//为防止加载广告失败后立刻跳离开屏可能造成的视觉上类似于"闪退"的情况,根据设置的minSplashTimeWhenNoAD
|
// 计算出还需要延时多久
|
handler.postDelayed(new Runnable() {
|
@Override
|
public void run() {
|
SplashActivity.this.startActivity(new Intent(SplashActivity.this, MainActivity.class));
|
SplashActivity.this.finish();
|
}
|
}, shouldDelayMills);
|
}
|
|
@Override
|
public void onADLoaded(long l) {
|
|
}
|
|
/**
|
* 设置一个变量来控制当前开屏页面是否可以跳转,当开屏广告为普链类广告时,点击会打开一个广告落地页,此时开发者还不能打开自己的App主页。当从广告落地页返回以后,
|
* 才可以跳转到开发者自己的App主页;当开屏广告是App类广告时只会下载App。
|
*/
|
private void next() {
|
if (canJump) {
|
if (needStartDemoList) {
|
this.startActivity(new Intent(this, MainActivity.class));
|
}
|
this.finish();
|
} else {
|
canJump = true;
|
}
|
}
|
|
|
/**
|
* 开屏页一定要禁止用户对返回按钮的控制,否则将可能导致用户手动退出了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);
|
}
|
|
|
}
|