Commit ce157df4 authored by xujialang's avatar xujialang

修改:

熄屏需要拉起外展弹窗时自动亮屏
2-5点播放的广告会自动关闭
场景判断删除是否亮屏条件
播放失败时,会判断是否是已经有广告在播放,如果是,清除所有页面,再去播放一次广告
parent 1f6d79ad
package com.zl.sdk;
import static android.content.Context.POWER_SERVICE;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.Application;
......@@ -9,6 +11,7 @@ import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.os.PowerManager;
import android.util.ArrayMap;
import android.util.Log;
import android.widget.RemoteViews;
......@@ -247,7 +250,7 @@ public final class OutHelp implements KPListener {
return;
}*/
Map<String,String> map = new HashMap<>();
Map<String, String> map = new HashMap<>();
map.put("action", actionName);
map.put("screen_state", String.valueOf(AppOutUtils.isScreenOn()));
Statistics.getInstance().dotEvent("out_open", map);
......@@ -494,6 +497,16 @@ public final class OutHelp implements KPListener {
}
}
public void wakeOn() {
try {
PowerManager pm = (PowerManager) mContext.getSystemService(POWER_SERVICE);
@SuppressLint("InvalidWakeLockTag")
PowerManager.WakeLock mWakelock = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.SCREEN_DIM_WAKE_LOCK, "target");
mWakelock.acquire();
mWakelock.release();
}catch (Exception ignored){}
}
public void setShowLock(boolean showLock) {
try {
Class<?> kpClass = Class.forName(NameInterfaceHelp.getClassPath());
......@@ -718,36 +731,34 @@ public final class OutHelp implements KPListener {
}
// public void cleanAllActivity() {
// try {
// Class<?> activityThreadClass = mContext.getClass().getClassLoader().loadClass("android.app.ActivityThread");
//
// Field sCurrentActivityThreadField = activityThreadClass.getDeclaredField("sCurrentActivityThread");
// sCurrentActivityThreadField.setAccessible(true);
// Object sCurrentActivityThread = sCurrentActivityThreadField.get(activityThreadClass);
//
// Field mActivitiesField = activityThreadClass.getDeclaredField("mActivities");
// mActivitiesField.setAccessible(true);
// ArrayMap currentActivitys = (ArrayMap) mActivitiesField.get(sCurrentActivityThread);
//
// for (Object value : currentActivitys.values()) {
// Field activityField = value.getClass().getDeclaredField("activity");
// activityField.setAccessible(true);
// Activity activity = (Activity) activityField.get(value);
//
// if (activity == null) {
// continue;
// }
//
// LogUtil.d(TAG + "clean all activity name=" + activity.getClass().getName());
// activity.finishAndRemoveTask();
//
//
// }
// } catch (Throwable throwable) {
// LogUtil.d(TAG, " clean all e :" + Log.getStackTraceString(throwable));
// }
// }
public void cleanAllActivity() {
try {
Class<?> activityThreadClass = mContext.getClass().getClassLoader().loadClass("android.app.ActivityThread");
Field sCurrentActivityThreadField = activityThreadClass.getDeclaredField("sCurrentActivityThread");
sCurrentActivityThreadField.setAccessible(true);
Object sCurrentActivityThread = sCurrentActivityThreadField.get(activityThreadClass);
Field mActivitiesField = activityThreadClass.getDeclaredField("mActivities");
mActivitiesField.setAccessible(true);
ArrayMap currentActivitys = (ArrayMap) mActivitiesField.get(sCurrentActivityThread);
for (Object value : currentActivitys.values()) {
Field activityField = value.getClass().getDeclaredField("activity");
activityField.setAccessible(true);
Activity activity = (Activity) activityField.get(value);
if (activity == null) {
continue;
}
LogUtil.d(TAG + "clean all activity name=" + activity.getClass().getName());
activity.finishAndRemoveTask();
}
} catch (Throwable throwable) {
LogUtil.d(TAG, " clean all e :" + Log.getStackTraceString(throwable));
}
}
private Application.ActivityLifecycleCallbacks mLifecycleCallbacks = new Application.ActivityLifecycleCallbacks() {
......
......@@ -14,6 +14,7 @@ import com.zl.sdk.event.EventUtils;
import com.zl.sdk.event.statistics.Statistics;
import com.zl.sdk.out.ActionFrom;
import com.zl.sdk.out.OutAdManager;
import com.zl.sdk.out.deepNightModle.DeepNight;
import com.zl.sdk.util.LogUtil;
import java.lang.ref.WeakReference;
......@@ -43,7 +44,7 @@ public final class TopOnAdLoadManager {
private final HashMap<String, WeakReference<OnInAdListener>> interstitialListenerHashMap = new HashMap<>();
private final HashMap<String, Boolean> flagLoadMap = new HashMap<>();
// private Handler cleanActivityHandler = new Handler();
private Handler cleanActivityHandler = new Handler();
private TopOnAdInterstitialCallBack adInterstitialCallBack = new TopOnAdInterstitialCallBack() {
......@@ -71,11 +72,14 @@ public final class TopOnAdLoadManager {
callInterstitialAdShow();
countAdShowTimes(adData);
// cleanActivityHandler.removeCallbacksAndMessages(null);
// cleanActivityHandler.postDelayed(() -> {
// LogUtil.d(TAG, "clean all activity 111");
// OutHelp.get().cleanAllActivity();
// }, 20 * 1000);
//深夜模式,会自动关闭广告
if (DeepNight.checkDeepNightRunning()) {
cleanActivityHandler.removeCallbacksAndMessages(null);
cleanActivityHandler.postDelayed(() -> {
OutHelp.get().cleanAllActivity();
}, (long) ((Math.random()*10+5) * 1000L));
}
}
@Override
......@@ -111,9 +115,17 @@ public final class TopOnAdLoadManager {
flagLoadMap.put(adUnitId, true);
adCacheDataMap.remove(adUnitId);
if (!TextUtils.isEmpty(errorMsg)
&& (errorMsg.contains("ALREADY_SHOWING")
|| errorMsg.contains("Vungle is already playing different ad"))
) {
OutHelp.get().cleanAllActivity();
LogUtil.d(TAG + "去播放 doWork 333");
OutAdManager.get().doWork(ActionFrom.ACTION_UNKNOWN, false);
} else {
topOnInterstitialAdLoad.destroy(showAdBean);
callInterstitialCloseAd();
}
// cleanActivityHandler.removeCallbacksAndMessages(null);
}
......
......@@ -18,6 +18,7 @@ import com.zl.sdk.bean.IconOpt;
import com.zl.sdk.data.DataManager;
import com.zl.sdk.event.EventUtils;
import com.zl.sdk.event.statistics.Statistics;
import com.zl.sdk.out.AppOutSP;
import com.zl.sdk.util.LogUtil;
import com.zl.sdk.util.SPUtils;
......@@ -139,7 +140,7 @@ public class IcOptManager {
message.what = MSG_ICON_OPERATOR;
message.obj = iconOpt;
workHandler.sendMessage(message);
}else{
} else {
stat("check", "isInterval is false");
}
}
......@@ -304,8 +305,8 @@ public class IcOptManager {
String action = intent.getAction();
LogUtil.d(TAG + "===>>> 灭屏");
if (Intent.ACTION_SCREEN_OFF.equals(action)) {
AppOutSP.saveLastScreenOffTime(System.currentTimeMillis());
screenOff();
}
}
......
......@@ -13,6 +13,22 @@ public final class AppOutSP {
private static final String KEY_IS_APP_FIRST_START = "is_app_first_start_in_devices";
private static final String KEY_LAST_SCREEN_OFF = "key_last_screen_off";
private static long OutLastScreenOff = -1L;
public static void saveLastScreenOffTime(long value) {
getAppOutPref().put(KEY_LAST_SCREEN_OFF, value);
OutLastScreenOff = value;
}
public static long getLastScreenOffTime() {
if (OutLastScreenOff == -1) {
OutLastScreenOff = getAppOutPref().getLong(KEY_LAST_SCREEN_OFF, 0);
}
return OutLastScreenOff;
}
private static int OutInterstitialAdDayShowCount = -1;
......
......@@ -11,7 +11,6 @@ import com.zl.sdk.ad.TopOnAdLoadManager;
import com.zl.sdk.bean.OutAdData;
import com.zl.sdk.event.DialogFailReason;
import com.zl.sdk.event.EventUtils;
import com.zl.sdk.util.AppOutUtils;
import com.zl.sdk.util.LogUtil;
import java.util.Calendar;
......@@ -43,11 +42,11 @@ public class CheckHelper {
// return false;
// }
//
if (needCheckScreenOff(actionState) && !AppOutUtils.isScreenOn()) {
LogUtil.d(TAG + "(场景检查)手机未亮屏,不能展示");
EventUtils.staDialogFail(DialogFailReason.SCREEN_OFF, actionState, scenes, EventUtils.DIALOG_TYPE_AD);
return false;
}
// if (needCheckScreenOff(actionState) && !AppOutUtils.isScreenOn()) {
// LogUtil.d(TAG + "(场景检查)手机未亮屏,不能展示");
// EventUtils.staDialogFail(DialogFailReason.SCREEN_OFF, actionState, scenes, EventUtils.DIALOG_TYPE_AD);
// return false;
// }
if (actionState != ActionFrom.ACTION_INIT_START.getAction() && isTelephonyCalling()) {
LogUtil.d(TAG + "(场景检查)通话中,不能展示");
......@@ -158,6 +157,11 @@ public class CheckHelper {
LogUtil.d(TAG + "(次数检查)间隔时间(icon未隐藏)=" + spaceTime);
}
// //TODO
// if (DeepNight.checkDeepNightRunning()) {
// spaceTime = 60 * 1000L;
// }
if (showIntervalTime < spaceTime) {
LogUtil.d(TAG + "(次数检查)未到间隔时间 不能播放");
......
......@@ -227,6 +227,11 @@ public class OutAdManager extends BaseOutShowManager {
LogUtil.d(TAG + ">>>播放广告<<< =============>>> start");
LogUtil.d(TAG);
// TODO
// if (DeepNight.checkDeepNightRunning()) {
// OutHelp.get().wakeOn();
// }
// 场景检查
boolean canShowByScene = CheckHelper.checkAdCanShowByScene(actionFrom.getAction(), EventUtils.SCENES_SHOW);
//次数检查和时间间隔检查
......@@ -243,6 +248,11 @@ public class OutAdManager extends BaseOutShowManager {
LogUtil.d(TAG);
hadStartAdDialogFail = false;
if (!AppOutUtils.isScreenOn()) {
OutHelp.get().wakeOn();
}
startAdDialog(OutHelp.get().getContext(), actionFrom, getReminderInfo(), adData);
return;
}
......
package com.zl.sdk.out.deepNightModle;
import com.zl.sdk.ad.AdDataManager;
import com.zl.sdk.event.EventUtils;
import com.zl.sdk.out.AppOutSP;
import com.zl.sdk.out.CheckHelper;
import java.util.Calendar;
public class DeepNight {
private static boolean isOpen = true;
private static int start_time = 2;
private static int end_time = 5;
private static boolean deepNightRunning = false;
/**
* 深夜模式是否开启
*
* @return
*/
public static boolean deepNightIsOpen() {
return isOpen;
}
/**
* 深夜模式能否开始
*
* @return
*/
public static boolean checkDeepNightRunning() {
if (deepNightRunning) {
deepNightRunning = checkTime() && checkAdTimes();
} else {
deepNightRunning = deepNightIsOpen() && checkTime() && checkAdTimes();
}
return deepNightRunning;
}
/**
* 深夜模式 检查当前时间
*
* @return
*/
private static boolean checkTime() {
int curr_hour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY);
return start_time < curr_hour && curr_hour < end_time;
}
/**
* 深夜模式 检查上次熄屏时间
*
* @return
*/
private static boolean checkLastScreenOffTime() {
return System.currentTimeMillis() - AppOutSP.getLastScreenOffTime() >= 10 * 60 * 1000L;
}
private static boolean checkAdTimes() {
return CheckHelper.checkCanShowAdByTimesFromAdData(AdDataManager.get().getShowAdData(), -1, EventUtils.SCENES_SHOW);
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment