170 lines
5.0 KiB
Java
170 lines
5.0 KiB
Java
package com.uiui.os.utils;
|
|
|
|
import android.annotation.SuppressLint;
|
|
import android.content.Context;
|
|
import android.provider.Settings;
|
|
import android.text.TextUtils;
|
|
import android.util.Log;
|
|
|
|
import androidx.annotation.NonNull;
|
|
|
|
import com.google.gson.Gson;
|
|
import com.google.gson.JsonParser;
|
|
import com.google.gson.reflect.TypeToken;
|
|
|
|
import java.io.Serializable;
|
|
import java.lang.reflect.Type;
|
|
import java.text.ParseException;
|
|
import java.text.SimpleDateFormat;
|
|
import java.util.Date;
|
|
import java.util.List;
|
|
|
|
public class AppUsedTimeUtils {
|
|
private static final String TAG = AppUsedTimeUtils.class.getSimpleName();
|
|
|
|
@SuppressLint("StaticFieldLeak")
|
|
private static AppUsedTimeUtils sInstance;
|
|
private Context mContext;
|
|
|
|
private SimpleDateFormat ruleSDF = new SimpleDateFormat("HH:mm:ss");
|
|
private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
|
private AppTimeinfo appTimeinfo;
|
|
|
|
private AppUsedTimeUtils(Context context) {
|
|
this.mContext = context;
|
|
appTimeinfo = getAppTimeinfo();
|
|
}
|
|
|
|
public static void init(Context context) {
|
|
if (sInstance == null) {
|
|
sInstance = new AppUsedTimeUtils(context);
|
|
}
|
|
}
|
|
|
|
public static AppUsedTimeUtils getInstance() {
|
|
if (sInstance == null) {
|
|
throw new IllegalStateException("You must be init TimeUtils first");
|
|
}
|
|
return sInstance;
|
|
}
|
|
|
|
private static String normalStartTime = "8:00:00";
|
|
private static String unusualStartTime = "22:00:00";
|
|
|
|
static class AppTimeinfo implements Serializable {
|
|
private static final long serialVersionUID = 5373751133823666192L;
|
|
|
|
AppTimeinfo() {
|
|
this.appPackageName = "";
|
|
this.endTime = 0;
|
|
this.startTime = 0;
|
|
}
|
|
|
|
private String appPackageName;
|
|
private long endTime;
|
|
private long startTime;
|
|
|
|
public String getAppPackageName() {
|
|
return appPackageName;
|
|
}
|
|
|
|
public void setAppPackageName(String appPackageName) {
|
|
this.appPackageName = appPackageName;
|
|
}
|
|
|
|
public long getEndTime() {
|
|
return endTime;
|
|
}
|
|
|
|
public void setEndTime(long endTime) {
|
|
this.endTime = endTime;
|
|
}
|
|
|
|
public long getStartTime() {
|
|
return startTime;
|
|
}
|
|
|
|
public void setStartTime(long startTime) {
|
|
this.startTime = startTime;
|
|
}
|
|
|
|
@NonNull
|
|
@Override
|
|
public String toString() {
|
|
return JsonParser.parseString(new Gson().toJson(this)).getAsJsonObject().toString();
|
|
}
|
|
}
|
|
|
|
synchronized public void setAppPackageName(String name) {
|
|
appTimeinfo.setAppPackageName(name);
|
|
setAppTimeinfo();
|
|
}
|
|
|
|
synchronized public String getAppPackageName() {
|
|
return appTimeinfo.getAppPackageName();
|
|
}
|
|
|
|
synchronized public void setStartTime(long time) {
|
|
appTimeinfo.setStartTime(time);
|
|
setAppTimeinfo();
|
|
}
|
|
|
|
synchronized public long getStartTime() {
|
|
return appTimeinfo.getStartTime();
|
|
}
|
|
|
|
synchronized public void setEndTime(long time) {
|
|
appTimeinfo.setEndTime(time);
|
|
setAppTimeinfo();
|
|
}
|
|
|
|
synchronized public long getEndTime() {
|
|
return appTimeinfo.getEndTime();
|
|
}
|
|
|
|
synchronized private AppTimeinfo getAppTimeinfo() {
|
|
String jsonString = Settings.System.getString(mContext.getContentResolver(), "runningAppInfo");
|
|
if (TextUtils.isEmpty(jsonString)) {
|
|
return new AppTimeinfo();
|
|
}
|
|
Log.e(TAG, "getAppTimeinfo: " + jsonString);
|
|
Type type = new TypeToken<AppTimeinfo>() {
|
|
}.getType();
|
|
Gson gson = new Gson();
|
|
AppTimeinfo appTimeinfo = gson.fromJson(jsonString, type);
|
|
return appTimeinfo;
|
|
}
|
|
|
|
synchronized private void setAppTimeinfo() {
|
|
String jsonString = JsonParser.parseString(appTimeinfo.toString()).getAsJsonObject().toString();
|
|
Settings.System.putString(mContext.getContentResolver(), "runningAppInfo", jsonString);
|
|
}
|
|
|
|
private static final long DAY_TIME = 1000 * 60 * 60 * 24;
|
|
|
|
public boolean isNormalTime() {
|
|
long nowTime = System.currentTimeMillis();
|
|
String nowTimeString = ruleSDF.format(new Date(nowTime)); // 时间戳转换日期
|
|
try {
|
|
Date startDate = ruleSDF.parse(normalStartTime);
|
|
Date endDate = ruleSDF.parse(unusualStartTime);
|
|
Date now = ruleSDF.parse(nowTimeString);
|
|
Log.e(TAG, "isScreenshot: startDate = " + startDate);
|
|
Log.e(TAG, "isScreenshot: endDate = " + endDate);
|
|
Log.e(TAG, "isScreenshot: now = " + now);
|
|
if (startDate.getTime() <= now.getTime() && now.getTime() <= endDate.getTime()) {
|
|
return true;
|
|
} else if (endDate.getTime() < now.getTime() && now.getTime() <= startDate.getTime() + DAY_TIME) {
|
|
return false;
|
|
}
|
|
} catch (ParseException e) {
|
|
e.printStackTrace();
|
|
Log.e(TAG, "isScreenshot: " + e.getMessage());
|
|
}
|
|
return false;
|
|
}
|
|
|
|
|
|
}
|