Commit ce157df4 authored by xujialang's avatar xujialang

修改:

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