|
|
@@ -17,8 +17,7 @@ import android.support.v7.app.AlertDialog;
|
|
|
import android.text.TextUtils;
|
|
|
import android.view.View;
|
|
|
|
|
|
-import com.jaredrummler.android.processes.AndroidProcesses;
|
|
|
-import com.jaredrummler.android.processes.models.AndroidAppProcess;
|
|
|
+import com.kfzs.duanduan.utils.ApkUtils;
|
|
|
import com.sheep.gamegroup.model.entity.AppRecord;
|
|
|
import com.sheep.gamegroup.model.entity.AppUsage;
|
|
|
import com.sheep.gamegroup.model.entity.DialogConfig;
|
|
|
@@ -27,6 +26,7 @@ import com.sheep.gamegroup.util.ActivityManager;
|
|
|
import com.sheep.gamegroup.util.ListUtil;
|
|
|
import com.sheep.gamegroup.util.LogUtil;
|
|
|
import com.sheep.gamegroup.util.MyDbManager;
|
|
|
+import com.sheep.gamegroup.util.SysAppUtil;
|
|
|
import com.sheep.gamegroup.util.ViewUtil;
|
|
|
import com.sheep.jiuyan.samllsheep.SheepApp;
|
|
|
import com.sheep.jiuyan.samllsheep.utils.G;
|
|
|
@@ -54,24 +54,38 @@ public class AppUsageManager {
|
|
|
|
|
|
//记录前台app运行时长
|
|
|
public void recordCurrentAppUsage() {
|
|
|
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {//android 7.0以上不支持
|
|
|
+// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {//android 7.0以上不支持
|
|
|
+// return;
|
|
|
+// }
|
|
|
+// List<AndroidAppProcess> processes = AndroidProcesses.getRunningForegroundApps(SheepApp.getInstance());
|
|
|
+// AndroidAppProcess androidAppProcess = ListUtil.getLast(processes);
|
|
|
+// if (androidAppProcess != null) {
|
|
|
+// String packageName = androidAppProcess.name;
|
|
|
+// String appName = null;
|
|
|
+// try {
|
|
|
+// PackageInfo packageInfo = androidAppProcess.getPackageInfo(SheepApp.getInstance(), 0);
|
|
|
+// appName = packageInfo.applicationInfo.loadLabel(SheepApp.getInstance().getPackageManager()).toString();
|
|
|
+//
|
|
|
+// LogUtil.println("getAppTime", appName, packageName);
|
|
|
+// } catch (PackageManager.NameNotFoundException e) {
|
|
|
+// e.printStackTrace();
|
|
|
+// }
|
|
|
+
|
|
|
+ if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP) {//android 5.0以上不支持
|
|
|
return;
|
|
|
}
|
|
|
- List<AndroidAppProcess> processes = AndroidProcesses.getRunningForegroundApps(SheepApp.getInstance());
|
|
|
- AndroidAppProcess androidAppProcess = ListUtil.getLast(processes);
|
|
|
- if (androidAppProcess != null) {
|
|
|
- String packageName = androidAppProcess.name;
|
|
|
+ android.app.ActivityManager.RunningAppProcessInfo process = getAppProcessInfoInForeground();
|
|
|
+ if (process != null) {
|
|
|
+// LogUtil.println("getRunningAppProcesses", process.processName, process.importance == android.app.ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND);
|
|
|
+ String packageName = process.processName;//没有packageName字段,可能会出问题
|
|
|
String appName = null;
|
|
|
- try {
|
|
|
- PackageInfo packageInfo = androidAppProcess.getPackageInfo(SheepApp.getInstance(), 0);
|
|
|
+ PackageInfo packageInfo = ApkUtils.getPackageInfo(SheepApp.getInstance().getPackageName());
|
|
|
+ if (packageInfo != null)
|
|
|
appName = packageInfo.applicationInfo.loadLabel(SheepApp.getInstance().getPackageManager()).toString();
|
|
|
|
|
|
- LogUtil.println("getAppTime", appName, packageName);
|
|
|
- } catch (PackageManager.NameNotFoundException e) {
|
|
|
- e.printStackTrace();
|
|
|
- }
|
|
|
+ LogUtil.println("getAppTime", appName, packageName);
|
|
|
|
|
|
- if(AutoTaskListUtil.getInstance().isLastAppRecord(packageName)){//仍然是之前的app
|
|
|
+ if (AutoTaskListUtil.getInstance().isLastAppRecord(packageName)) {//仍然是之前的app
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
@@ -95,6 +109,19 @@ public class AppUsageManager {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ private android.app.ActivityManager.RunningAppProcessInfo getAppProcessInfoInForeground() {
|
|
|
+ android.app.ActivityManager manager = (android.app.ActivityManager) SheepApp.getInstance().getSystemService(Context.ACTIVITY_SERVICE);
|
|
|
+ List<android.app.ActivityManager.RunningAppProcessInfo> processList = manager == null ? null : manager.getRunningAppProcesses();
|
|
|
+ if(!ListUtil.isEmpty(processList)){
|
|
|
+ for (android.app.ActivityManager.RunningAppProcessInfo item : processList) {
|
|
|
+ if(item != null && item.importance == android.app.ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND){
|
|
|
+ return item;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 需要开启查看应用使用情况的权限
|
|
|
*
|
|
|
@@ -117,30 +144,34 @@ public class AppUsageManager {
|
|
|
appUsage.setLastTimeStamp(queryUsageStat.getLastTimeStamp());
|
|
|
appUsageList.add(appUsage);
|
|
|
}
|
|
|
- MyDbManager.getInstance().saveOrUpdate(appUsageList);
|
|
|
- }
|
|
|
+ MyDbManager.getInstance().saveOrUpdate(appUsageList);//保存或者更新AppUsage,以便之后用来显示时间
|
|
|
+ }
|
|
|
return isEmpty;
|
|
|
} else{
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 尝试打开权限对话框 5.1及以上使用
|
|
|
+ * @param isSaveData 是否保存AppUsage数据,因为AppUsage通过系统获取的数据转化而来,而且,不切换应用时不会改变,而要实时显示时间就必须缓冲数据
|
|
|
+ */
|
|
|
public void tryOpenLookAppUsageStatsPermisson(boolean isSaveData) {
|
|
|
- if (!needOpenLookAppUsageStatsPermisson(isSaveData)) {//不需要开启
|
|
|
- return;
|
|
|
- }
|
|
|
- if(AutoTaskListUtil.getInstance().isShowing()){//对话框仍在显示,就不显示 打开权限功能的对话框
|
|
|
- return;
|
|
|
- }
|
|
|
- LogUtil.println("tryOpenLookAppUsageStatsPermisson", "start");
|
|
|
- AutoTaskListUtil.getInstance().clearAlertDialog();
|
|
|
- if(!AutoTaskListUtil.getInstance().isEmpty()){
|
|
|
- LogUtil.println("tryOpenLookAppUsageStatsPermisson", "notEmpty");
|
|
|
- showAccessibilityDialog();
|
|
|
- } else {
|
|
|
- LogUtil.println("tryOpenLookAppUsageStatsPermisson","else");
|
|
|
- }
|
|
|
- LogUtil.println("tryOpenLookAppUsageStatsPermisson","end");
|
|
|
+ if (!needOpenLookAppUsageStatsPermisson(isSaveData)) {//不需要开启
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if(AutoTaskListUtil.getInstance().isShowing()){//对话框仍在显示,就不显示 打开权限功能的对话框
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ LogUtil.println("tryOpenLookAppUsageStatsPermisson", "start");
|
|
|
+ AutoTaskListUtil.getInstance().clearAlertDialog();
|
|
|
+ if(!AutoTaskListUtil.getInstance().isEmpty()){
|
|
|
+ LogUtil.println("tryOpenLookAppUsageStatsPermisson", "notEmpty");
|
|
|
+ showAccessibilityDialog();
|
|
|
+ } else {
|
|
|
+ LogUtil.println("tryOpenLookAppUsageStatsPermisson","else");
|
|
|
+ }
|
|
|
+ LogUtil.println("tryOpenLookAppUsageStatsPermisson","end");
|
|
|
}
|
|
|
public void showAccessibilityDialog() {
|
|
|
AlertDialog tipToOpernAccessibilityDialog = ViewUtil.showMsgDialog(SheepApp.getInstance(), new DialogConfig().setTitle("温馨提示!")
|
|
|
@@ -203,7 +234,8 @@ public class AppUsageManager {
|
|
|
if (totalTimeMap.containsKey(packageName) && totalTimeMap.get(packageName) == totalTime) {
|
|
|
totalTime += time - timeMap.get(packageName);
|
|
|
} else {
|
|
|
- totalTimeMap.put(packageName, totalTime);
|
|
|
+ totalTimeMap.put(packageName, totalTime);//TODO 这里应该还要保存数据到数据库
|
|
|
+ MyDbManager.getInstance().saveOrUpdate(appUsage);
|
|
|
timeMap.put(packageName, time);
|
|
|
}
|
|
|
return Math.max(0, totalTime - saveTotalTime);
|
|
|
@@ -218,13 +250,23 @@ public class AppUsageManager {
|
|
|
}
|
|
|
}
|
|
|
if(packageName == null) {//为空时需要获取前台的packageName
|
|
|
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {//android 7.0以上不支持
|
|
|
+// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {//android 7.0以上不支持
|
|
|
+// return 0;
|
|
|
+// }
|
|
|
+ //compile 'com.jaredrummler:android-processes:1.1.1'
|
|
|
+// List<AndroidAppProcess> processes = AndroidProcesses.getRunningForegroundApps(SheepApp.getInstance());
|
|
|
+// AndroidAppProcess androidAppProcess = ListUtil.getLast(processes);
|
|
|
+// if (androidAppProcess != null) {
|
|
|
+// packageName = androidAppProcess.name;
|
|
|
+// appUsage.setPackageName(packageName);
|
|
|
+// }
|
|
|
+
|
|
|
+ if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP) {//android 5.0以上不支持
|
|
|
return 0;
|
|
|
}
|
|
|
- List<AndroidAppProcess> processes = AndroidProcesses.getRunningForegroundApps(SheepApp.getInstance());
|
|
|
- AndroidAppProcess androidAppProcess = ListUtil.getLast(processes);
|
|
|
- if (androidAppProcess != null) {
|
|
|
- packageName = androidAppProcess.name;
|
|
|
+ android.app.ActivityManager.RunningAppProcessInfo process = getAppProcessInfoInForeground();
|
|
|
+ if(process != null ) {
|
|
|
+ packageName = process.processName;//没有packageName字段,可能会出问题
|
|
|
appUsage.setPackageName(packageName);
|
|
|
}
|
|
|
if(TextUtils.isEmpty(packageName)){//没有获取到当前正在运行的应用
|
|
|
@@ -235,7 +277,6 @@ public class AppUsageManager {
|
|
|
|
|
|
if(AutoTaskListUtil.getInstance().isLastAppRecord(packageName)){
|
|
|
runTime += System.currentTimeMillis() - AutoTaskListUtil.getInstance().getLastTime();
|
|
|
- AutoTaskListUtil.getInstance().setLastTime(System.currentTimeMillis());
|
|
|
}
|
|
|
return runTime;
|
|
|
}
|