package com.android.demo.lileidemo.utils;
import android.app.usage.UsageStats;
import android.util.Log;
import com.android.demo.lileidemo.MyApplication;
import com.android.demo.lileidemo.constant.AppConstants;
import java.lang.reflect.Field;
import java.util.List;
/**
* date: 04/16/2020.
* author: lilei.
*/
public class ReflectUtil {
private static final String TAG = AppConstants.APP_TAG + "ReflectUtil ";
private static UsageStats mUsageStats;
private static String mPackageName;
public static synchronized void testReflect() {
long currentTimeMillis = System.currentTimeMillis();
long hourStartMillis = DateTimeUtil.getHourStartMillis(currentTimeMillis);
long startTimeMillis = 1586941200000L;//hourStartMillis - AppConstants.OPEN_APP_STATS_INTERVAL_MILLIS;
long endTimeMillis = 1586941464278L;
List<UsageStats> listUsageStats = UsageStatsUtil.getUsageStatsList(
MyApplication.getAppContext(), startTimeMillis, endTimeMillis);
for (int i = 0; i < listUsageStats.size(); i++) {
mUsageStats = listUsageStats.get(i);
getAppLaunchCount(mUsageStats);
mPackageName = mUsageStats.getPackageName();
long totalTimeInForeground = mUsageStats.getTotalTimeInForeground();
Log.d(TAG, "collectAllOpenApp() mPackageName:" + mPackageName
+ " totalTimeInForeground:" + totalTimeInForeground
+ " getFirstTimeStamp:" + mUsageStats.getFirstTimeStamp()
+ " getLastTimeStamp:" + mUsageStats.getLastTimeStamp()
+ " getLastTimeUsed:" + mUsageStats.getLastTimeUsed()
+ " startTimeMillis:" + startTimeMillis + " endTimeMillis:" + endTimeMillis);
}
}
private static void getAppLaunchCount(UsageStats usageStats) {
Class<UsageStats> usageStatsClass = UsageStats.class;
try {
//step1 通过方法名称反射
// Method method = usageStatsClass.getDeclaredMethod("getLastTimeUsed",
// (Class[]) null);
// //Open permission.
// method.setAccessible(true);
// Object lastTimeUsed = (Object) method.invoke(usageStats, (Object[]) null);
//
//step2 通过变量名称反射
Class c = usageStats.getClass();
Field field = c.getDeclaredField("mLaunchCount");
//Field field = usageStats.getClass().getDeclaredField("mAppLaunchCount");
field.setAccessible(true);
int launchCount = field.getInt(usageStats);
field = c.getDeclaredField("mLastEvent");
//Field field = usageStats.getClass().getDeclaredField("mAppLaunchCount");
field.setAccessible(true);
int lastEvent = field.getInt(usageStats);
Log.d(TAG, "getAppLaunchCount() *# getPackageName:" + usageStats.getPackageName()
+ " lastEvent:" + lastEvent + " launchCount:" + launchCount);
} catch (Exception e) {
Log.d(TAG, "getAppLaunchCount() error:" + e.toString());
e.printStackTrace();
}
}
}