android.app.usage.UsageEvents Java Examples

The following examples show how to use android.app.usage.UsageEvents. You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: DetailActivity.java    From AppsMonitor with MIT License 7 votes vote down vote up
@Override
protected void onPostExecute(List<AppItem> appItems) {
    if (mContext.get() != null) {
        List<AppItem> newList = new ArrayList<>();
        long duration = 0;
        for (AppItem item : appItems) {
            if (item.mEventType == UsageEvents.Event.USER_INTERACTION || item.mEventType == UsageEvents.Event.NONE) {
                continue;
            }
            duration += item.mUsageTime;
            if (item.mEventType == UsageEvents.Event.MOVE_TO_BACKGROUND) {
                AppItem newItem = item.copy();
                newItem.mEventType = -1;
                newList.add(newItem);
            }
            newList.add(item);
        }
        mTime.setText(String.format(getResources().getString(R.string.times), AppUtil.formatMilliSeconds(duration), appItems.get(appItems.size() - 1).mCount));
        mAdapter.setData(newList);
    }
}
 
Example #2
Source File: UsageStatsUtils.java    From FCM-for-Mojo with GNU General Public License v3.0 6 votes vote down vote up
public static String getForegroundPackage(UsageStatsManager usageStatsManager) {
    String packageName = null;

    final long INTERVAL = 1000 * 60;
    final long end = System.currentTimeMillis();
    final long begin = end - INTERVAL;
    final UsageEvents usageEvents = usageStatsManager.queryEvents(begin, end);
    while (usageEvents.hasNextEvent()) {
        UsageEvents.Event event = new UsageEvents.Event();
        usageEvents.getNextEvent(event);
        switch (event.getEventType()) {
            case UsageEvents.Event.MOVE_TO_FOREGROUND:
                packageName = event.getPackageName();
                break;
            case UsageEvents.Event.MOVE_TO_BACKGROUND:
                if (event.getPackageName().equals(packageName)) {
                    packageName = null;
                }
        }
    }

    return packageName;
}
 
Example #3
Source File: UStats.java    From AppPlus with MIT License 6 votes vote down vote up
@SuppressWarnings("ResourceType")
public static void getStats(Context context){
    UsageStatsManager usm = (UsageStatsManager) context.getSystemService("usagestats");
    int interval = UsageStatsManager.INTERVAL_YEARLY;
    Calendar calendar = Calendar.getInstance();
    long endTime = calendar.getTimeInMillis();
    calendar.add(Calendar.YEAR, -1);
    long startTime = calendar.getTimeInMillis();

    Log.d(TAG, "Range start:" + dateFormat.format(startTime) );
    Log.d(TAG, "Range end:" + dateFormat.format(endTime));

    UsageEvents uEvents = usm.queryEvents(startTime,endTime);
    while (uEvents.hasNextEvent()){
        UsageEvents.Event e = new UsageEvents.Event();
        uEvents.getNextEvent(e);

        if (e != null){
            Log.d(TAG, "Event: " + e.getPackageName() + "\t" +  e.getTimeStamp());
        }
    }
}
 
Example #4
Source File: LollipopDetector.java    From foregroundappchecker with Apache License 2.0 6 votes vote down vote up
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public String getForegroundApp(final Context context) {
    if(!Utils.hasUsageStatsPermission(context))
        return null;

    String foregroundApp = null;

    UsageStatsManager mUsageStatsManager = (UsageStatsManager) context.getSystemService(Service.USAGE_STATS_SERVICE);
    long time = System.currentTimeMillis();

    UsageEvents usageEvents = mUsageStatsManager.queryEvents(time - 1000 * 3600, time);
    UsageEvents.Event event = new UsageEvents.Event();
    while (usageEvents.hasNextEvent()) {
        usageEvents.getNextEvent(event);
        if(event.getEventType() == UsageEvents.Event.MOVE_TO_FOREGROUND) {
            foregroundApp = event.getPackageName();
        }
    }

    return foregroundApp ;
}
 
Example #5
Source File: UseTimeDataManager.java    From UseTimeStatistic with MIT License 6 votes vote down vote up
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
    private ArrayList<UsageEvents.Event>  getEventList(int dayNumber){
        ArrayList<UsageEvents.Event> mEventList = new ArrayList<>();
//        Calendar calendar = Calendar.getInstance();
//        long endTime = calendar.getTimeInMillis();
//        calendar.add(Calendar.YEAR, -1);
//        //long startTime = calendar.getTimeInMillis()- 3 * DateTransUtils.DAY_IN_MILLIS;
//        long startTime = calendar.getTimeInMillis();

        long endTime = 0,startTime = 0;
        if(dayNumber == 0 ){
            endTime = System.currentTimeMillis();
            startTime = DateTransUtils.getZeroClockTimestamp(endTime);
        }else {
            endTime = DateTransUtils.getZeroClockTimestamp(System.currentTimeMillis() - (dayNumber-1) * DateTransUtils.DAY_IN_MILLIS ) - 1;
            startTime = endTime - DateTransUtils.DAY_IN_MILLIS + 1;
        }
        return EventUtils.getEventList(mContext,startTime,endTime);
    }
 
Example #6
Source File: EventUtils.java    From UseTimeStatistic with MIT License 6 votes vote down vote up
@SuppressWarnings("ResourceType")
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public static ArrayList<UsageEvents.Event> getEventList(Context context, long startTime, long endTime){
    ArrayList<UsageEvents.Event> mEventList = new ArrayList<>();

    Log.i(TAG," EventUtils-getEventList()   Range start:" + startTime);
    Log.i(TAG," EventUtils-getEventList()   Range end:" +endTime);
    Log.i(TAG," EventUtils-getEventList()   Range start:" + dateFormat.format(startTime));
    Log.i(TAG," EventUtils-getEventList()   Range end:" + dateFormat.format(endTime));

    UsageStatsManager mUsmManager = (UsageStatsManager) context.getSystemService("usagestats");
    UsageEvents events = mUsmManager.queryEvents(startTime, endTime);

    while (events.hasNextEvent()) {
        UsageEvents.Event e = new UsageEvents.Event();
        events.getNextEvent(e);
        if (e != null && (e.getEventType() == 1 || e.getEventType() == 2)) {
            Log.i(TAG," EventUtils-getEventList()  "+e.getTimeStamp()+"   event:" + e.getClassName() + "   type = " + e.getEventType());
            mEventList.add(e);
        }
    }

    return mEventList;
}
 
Example #7
Source File: UseTimeDataManager.java    From UseTimeStatistic with MIT License 5 votes vote down vote up
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private ArrayList<UsageEvents.Event> getEventListCheckWithoutErrorData(){
    ArrayList<UsageEvents.Event> mList = new ArrayList<>();
    for(int i = 0; i < mEventList.size() ; i++){
        if(mEventList.get(i).getEventType() == 1 || mEventList.get(i).getEventType() == 2){
            mList.add(mEventList.get(i));
        }
    }
    return mList;
}
 
Example #8
Source File: BucketInfo.java    From mollyim-android with GNU General Public License v3.0 5 votes vote down vote up
public static @NonNull BucketInfo getInfo(@NonNull UsageStatsManager usageStatsManager, long overLastDurationMs) {
  StringBuilder stringBuilder = new StringBuilder();

  int currentBucket = usageStatsManager.getAppStandbyBucket();
  int worseBucket   = currentBucket;
  int bestBucket    = currentBucket;

  long              now           = System.currentTimeMillis();
  UsageEvents.Event event         = new UsageEvents.Event();
  UsageEvents       usageEvents   = usageStatsManager.queryEventsForSelf(now - overLastDurationMs, now);

  while (usageEvents.hasNextEvent()) {
    usageEvents.getNextEvent(event);

    if (event.getEventType() == UsageEvents.Event.STANDBY_BUCKET_CHANGED) {
      int appStandbyBucket = event.getAppStandbyBucket();

      stringBuilder.append(new Date(event.getTimeStamp()))
                   .append(": ")
                   .append("Bucket Change: ")
                   .append(bucketToString(appStandbyBucket))
                   .append("\n");

      if (appStandbyBucket > worseBucket) {
        worseBucket = appStandbyBucket;
      }
      if (appStandbyBucket < bestBucket) {
        bestBucket = appStandbyBucket;
      }
    }
  }

  return new BucketInfo(currentBucket, worseBucket, bestBucket, stringBuilder);
}
 
Example #9
Source File: KcaViewButtonService.java    From kcanotify with GNU General Public License v3.0 5 votes vote down vote up
private static boolean isForeGroundEvent(UsageEvents.Event event) {
    if(event == null || Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) return false;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
        return event.getEventType() == UsageEvents.Event.ACTIVITY_RESUMED;
    } else {
        return event.getEventType() == UsageEvents.Event.MOVE_TO_FOREGROUND;
    }
}
 
Example #10
Source File: TaskbarControllerTest.java    From Taskbar with Apache License 2.0 5 votes vote down vote up
private UsageEvents.Event buildTaskbarForegroundAppEvent(String className, long timestamp) {
    return EventBuilder
            .buildEvent()
            .setPackage(className)
            .setTimeStamp(timestamp)
            .setClass(className)
            .setEventType(MOVE_TO_FOREGROUND)
            .build();
}
 
Example #11
Source File: TaskbarController.java    From Taskbar with Apache License 2.0 5 votes vote down vote up
@VisibleForTesting
void filterForegroundApp(Context context,
                         SharedPreferences pref,
                         long searchInterval,
                         List<String> applicationIdsToRemove) {
    if (pref.getBoolean(PREF_HIDE_FOREGROUND, false)) {
        UsageStatsManager mUsageStatsManager =
                (UsageStatsManager) context.getSystemService(Context.USAGE_STATS_SERVICE);
        UsageEvents events =
                mUsageStatsManager.queryEvents(searchInterval, System.currentTimeMillis());
        UsageEvents.Event eventCache = new UsageEvents.Event();
        String currentForegroundApp = null;

        while (events.hasNextEvent()) {
            events.getNextEvent(eventCache);

            if (eventCache.getEventType() == UsageEvents.Event.MOVE_TO_FOREGROUND) {
                if (!(eventCache.getPackageName().contains(BuildConfig.BASE_APPLICATION_ID)
                        && !eventCache.getClassName().equals(MainActivity.class.getCanonicalName())
                        && !eventCache.getClassName().equals(HomeActivity.class.getCanonicalName())
                        && !eventCache.getClassName().equals(HomeActivityDelegate.class.getCanonicalName())
                        && !eventCache.getClassName().equals(SecondaryHomeActivity.class.getCanonicalName())
                        && !eventCache.getClassName().equals(InvisibleActivityFreeform.class.getCanonicalName()))) {
                    currentForegroundApp = eventCache.getPackageName();
                }
            }
        }

        if (!applicationIdsToRemove.contains(currentForegroundApp)) {
            applicationIdsToRemove.add(currentForegroundApp);
        }
    }
}
 
Example #12
Source File: UseTimeDataManager.java    From UseTimeStatistic with MIT License 5 votes vote down vote up
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private void checkEventList(ArrayList<UsageEvents.Event> list){
    boolean isCheckAgain = false ;
    for (int i = 0 ; i < list.size() - 1 ; i += 2){
        if(list.get(i).getClassName().equals(list.get(i+1).getClassName())){
            if(list.get(i).getEventType() != 1){
                Log.i(UseTimeDataManager.TAG,"   EventList 出错  : "+list.get(i).getPackageName() +"  "+ DateUtils.formatSameDayTime(list.get(i).getTimeStamp(), System.currentTimeMillis(), DateFormat.MEDIUM, DateFormat.MEDIUM).toString());
                list.remove(i);
                isCheckAgain = true;
                break;
            }
            if(list.get(i+1).getEventType() != 2){
                Log.i(UseTimeDataManager.TAG,"   EventList 出错 : "+list.get(i+1).getPackageName() +"  "+ DateUtils.formatSameDayTime(list.get(i+1).getTimeStamp(), System.currentTimeMillis(), DateFormat.MEDIUM, DateFormat.MEDIUM).toString());
                list.remove(i);
                isCheckAgain = true;
                break;
            }
        }else {
            //i和i+1的className对不上,则删除第i个数据,重新检查
            list.remove(i);
            isCheckAgain = true;
            break;
        }
    }
    if(isCheckAgain){
        checkEventList(list);
    }
}
 
Example #13
Source File: DetailActivity.java    From AppsMonitor with MIT License 5 votes vote down vote up
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
    AppItem item = mData.get(position);
    String desc = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss", Locale.getDefault()).format(new Date(item.mEventTime));
    if (item.mEventType == UsageEvents.Event.MOVE_TO_BACKGROUND) {
        holder.mLayout.setPadding(dpToPx(16), 0, dpToPx(16), dpToPx(4));
    } else if (item.mEventType == -1) {
        holder.mLayout.setPadding(dpToPx(16), dpToPx(4), dpToPx(16), dpToPx(4));
        desc = AppUtil.formatMilliSeconds(item.mUsageTime);
    } else if (item.mEventType == UsageEvents.Event.MOVE_TO_FOREGROUND) {
        holder.mLayout.setPadding(dpToPx(16), dpToPx(12), dpToPx(16), 0);
    }
    holder.mEvent.setText(String.format("%s %s", getPrefix(item.mEventType), desc));
}
 
Example #14
Source File: UseTimeDataManager.java    From UseTimeStatistic with MIT License 5 votes vote down vote up
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private ArrayList<UsageEvents.Event> getEventListChecked(){
    ArrayList<UsageEvents.Event> mList = new ArrayList<>();
    for(int i = 0; i < mEventList.size() ; i++){
        if(mEventList.get(i).getEventType() == 1 || mEventList.get(i).getEventType() == 2){
            mList.add(mEventList.get(i));
        }
    }
    return mList;
}
 
Example #15
Source File: EventCopyToFileUtils.java    From UseTimeStatistic with MIT License 5 votes vote down vote up
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public static void write(Context context, long startTime, long endTime){

    ArrayList<UsageEvents.Event> eventList = EventUtils.getEventList(context, startTime, endTime);

    if(eventList == null || eventList.size() == 0){
        return;
    }

    long fileName = DateTransUtils.getZeroClockTimestamp(startTime);
    String filePath = BASE_FILE_PATH + "/" + fileName + ".txt";
    try {
        checkFile(filePath);

        // 打开一个写文件器,构造函数中的第二个参数true表示以追加形式写文件
        FileWriter writer = new FileWriter(filePath, true);

        UsageEvents.Event lastEvent = null;

        for (int i = 0 ; i < eventList.size() ; i++){
            if(context.getPackageName().equals(eventList.get(i).getPackageName())){
                Log.i(TAG,"   "+eventList.get(i).getClassName());
                UsageEvents.Event thisEvent = eventList.get(i);
                if(lastEvent != null && lastEvent.getEventType() == 1 && thisEvent.getEventType() == 2 && lastEvent.getClassName().equals(thisEvent.getClassName())){
                    writer.write(StringUtils.getInputString(thisEvent.getTimeStamp(),thisEvent.getClassName(),thisEvent.getEventType(),thisEvent.getTimeStamp()-lastEvent.getTimeStamp()));
                }else {
                    writer.write(StringUtils.getInputString(thisEvent.getTimeStamp(),thisEvent.getClassName(),thisEvent.getEventType(),0));
                }
                lastEvent = thisEvent;
            }
        }
        writer.close();
        Log.i(TAG," WriteRecordFileUtils--writeToFile()  写入文件成功 " + fileName);

    } catch (IOException e) {
        e.printStackTrace();
    }
}
 
Example #16
Source File: DataManager.java    From AppsMonitor with MIT License 4 votes vote down vote up
ClonedEvent(UsageEvents.Event event) {
    packageName = event.getPackageName();
    eventClass = event.getClassName();
    timeStamp = event.getTimeStamp();
    eventType = event.getEventType();
}
 
Example #17
Source File: UseTimeDataManager.java    From UseTimeStatistic with MIT License 4 votes vote down vote up
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
    private void refreshOneTimeDetailList(int startIndex){
        Log.i(TAG,"  refreshOneTimeDetailList()     startIndex : " + startIndex);

        if(startIndex == 0){
            Log.i(TAG,"  refreshOneTimeDetailList()     每次从0开始,将原本的 mOneTimeDetailList 清除一次,然后开始分类 " );
            if(mOneTimeDetailList != null){
                mOneTimeDetailList.clear();
            }
        }

        long totalTime = 0 ;
        int usedIndex = 0;
        String pkg = null;
        ArrayList<UsageEvents.Event> list = new ArrayList();
        for (int i = startIndex ; i < mEventListChecked.size() ; i++){
            if( i == startIndex ){
                if(mEventListChecked.get(i).getEventType() == 2){
                    Log.i(TAG,"  refreshOneTimeDetailList()     warning : 每次打开一个app  第一个activity的类型是 2     ");
                }
                pkg = mEventListChecked.get(i).getPackageName();
                list.add(mEventListChecked.get(i));
            }else {
                if(pkg != null ){
                    if(pkg.equals(mEventListChecked.get(i).getPackageName())){
                        list.add(mEventListChecked.get(i));
                        if( i == mEventListChecked.size()-1 ){
                            usedIndex = i ;
                        }
                    }else {
                        usedIndex = i;
                        break;
                    }
                }
            }
        }

        Log.i(TAG,"   mEventListChecked 分类:   before  check :   list.size() = " + list.size());
        checkEventList(list);
        Log.i(TAG,"   mEventListChecked 分类:   after  check :   list.size() = " + list.size());
//        startTime = list.get(0).getTimeStamp();
//        endTime   = list.get( list.size() - 1 ).getTimeStamp();
        Log.i(TAG,"   mEventListChecked 分类:  本次启动的包名:"+list.get(0).getPackageName()+ "   时间:" + DateUtils.formatSameDayTime(list.get(0).getTimeStamp(), System.currentTimeMillis(), DateFormat.MEDIUM, DateFormat.MEDIUM));
        for(int i = 1 ; i < list.size() ; i += 2){
            if(list.get(i).getEventType() == 2 && list.get( i - 1).getEventType() == 1 ){
                totalTime += ( list.get(i).getTimeStamp() - list.get( i - 1).getTimeStamp());
            }
        }
        OneTimeDetails oneTimeDetails = new OneTimeDetails(pkg,totalTime,list);
        mOneTimeDetailList.add(oneTimeDetails);

        if(usedIndex < mEventListChecked.size() - 1){
            refreshOneTimeDetailList(usedIndex);
        }else {
            Log.i(TAG,"  refreshOneTimeDetailList()     已经将  mEventListChecked 分类完毕   ");
        }

    }
 
Example #18
Source File: OneTimeDetails.java    From UseTimeStatistic with MIT License 4 votes vote down vote up
public void setOneTimeDetailEventList(ArrayList<UsageEvents.Event> oneTimeDetailEventList) {
    OneTimeDetailEventList = oneTimeDetailEventList;
}
 
Example #19
Source File: OneTimeDetails.java    From UseTimeStatistic with MIT License 4 votes vote down vote up
public ArrayList<UsageEvents.Event> getOneTimeDetailEventList() {
    return OneTimeDetailEventList;
}
 
Example #20
Source File: TaskbarControllerTest.java    From Taskbar with Apache License 2.0 4 votes vote down vote up
@Test
public void testFilterForegroundApp() {
    prefs.edit().putBoolean(PREF_HIDE_FOREGROUND, true).apply();

    long searchInterval = 0L;
    List<String> applicationIdsToRemove = new ArrayList<>();
    UsageStatsManager usageStatsManager =
            (UsageStatsManager) context.getSystemService(Context.USAGE_STATS_SERVICE);
    final String entryTestPackage1 = ENTRY_TEST_PACKAGE + "-1";
    UsageEvents.Event event =
            EventBuilder
                    .buildEvent()
                    .setEventType(MOVE_TO_FOREGROUND)
                    .setTimeStamp(100L)
                    .setPackage(entryTestPackage1)
                    .build();
    shadowOf(usageStatsManager).addEvent(event);
    uiController.filterForegroundApp(context, prefs, searchInterval, applicationIdsToRemove);
    assertEquals(entryTestPackage1, applicationIdsToRemove.remove(0));

    event =
            EventBuilder
                    .buildEvent()
                    .setEventType(MOVE_TO_BACKGROUND)
                    .setTimeStamp(200L)
                    .setPackage(ENTRY_TEST_PACKAGE + "-2")
                    .build();
    shadowOf(usageStatsManager).addEvent(event);
    uiController.filterForegroundApp(context, prefs, searchInterval, applicationIdsToRemove);
    assertEquals(entryTestPackage1, applicationIdsToRemove.remove(0));

    event = buildTaskbarForegroundAppEvent(MainActivity.class.getCanonicalName(), 300L);
    shadowOf(usageStatsManager).addEvent(event);
    uiController.filterForegroundApp(context, prefs, searchInterval, applicationIdsToRemove);
    assertEquals(MainActivity.class.getCanonicalName(), applicationIdsToRemove.remove(0));

    event = buildTaskbarForegroundAppEvent(HomeActivity.class.getCanonicalName(), 400L);
    shadowOf(usageStatsManager).addEvent(event);
    uiController.filterForegroundApp(context, prefs, searchInterval, applicationIdsToRemove);
    assertEquals(HomeActivity.class.getCanonicalName(), applicationIdsToRemove.remove(0));

    event = buildTaskbarForegroundAppEvent(HomeActivityDelegate.class.getCanonicalName(), 500L);
    shadowOf(usageStatsManager).addEvent(event);
    uiController.filterForegroundApp(context, prefs, searchInterval, applicationIdsToRemove);
    assertEquals(HomeActivityDelegate.class.getCanonicalName(), applicationIdsToRemove.remove(0));

    event = buildTaskbarForegroundAppEvent(SecondaryHomeActivity.class.getCanonicalName(), 600L);
    shadowOf(usageStatsManager).addEvent(event);
    uiController.filterForegroundApp(context, prefs, searchInterval, applicationIdsToRemove);
    assertEquals(SecondaryHomeActivity.class.getCanonicalName(), applicationIdsToRemove.remove(0));

    event = buildTaskbarForegroundAppEvent(InvisibleActivityFreeform.class.getCanonicalName(), 700L);
    shadowOf(usageStatsManager).addEvent(event);
    uiController.filterForegroundApp(context, prefs, searchInterval, applicationIdsToRemove);
    assertEquals(InvisibleActivityFreeform.class.getCanonicalName(), applicationIdsToRemove.remove(0));

    event = buildTaskbarForegroundAppEvent(UNSUPPORTED, 800L);
    shadowOf(usageStatsManager).addEvent(event);
    uiController.filterForegroundApp(context, prefs, searchInterval, applicationIdsToRemove);
    assertEquals(UNSUPPORTED, applicationIdsToRemove.remove(0));

    prefs.edit().remove(PREF_HIDE_FOREGROUND).apply();
    uiController.filterForegroundApp(context, prefs, searchInterval, applicationIdsToRemove);
    assertEquals(0, applicationIdsToRemove.size());
}
 
Example #21
Source File: OneTimeDetails.java    From UseTimeStatistic with MIT License 4 votes vote down vote up
public OneTimeDetails(String pkg,long useTime, ArrayList<UsageEvents.Event> oneTimeDetailList) {
    this.pkgName = pkg;
    this.useTime = useTime;
    OneTimeDetailEventList = oneTimeDetailList;
}
 
Example #22
Source File: DataManager.java    From AppsMonitor with MIT License 4 votes vote down vote up
public List<AppItem> getTargetAppTimeline(Context context, String target, int offset) {
    List<AppItem> items = new ArrayList<>();
    UsageStatsManager manager = (UsageStatsManager) context.getSystemService(Context.USAGE_STATS_SERVICE);
    if (manager != null) {

        long[] range = AppUtil.getTimeRange(SortEnum.getSortEnum(offset));
        UsageEvents events = manager.queryEvents(range[0], range[1]);
        UsageEvents.Event event = new UsageEvents.Event();

        AppItem item = new AppItem();
        item.mPackageName = target;
        item.mName = AppUtil.parsePackageName(context.getPackageManager(), target);

        // 缓存
        ClonedEvent prevEndEvent = null;
        long start = 0;

        while (events.hasNextEvent()) {
            events.getNextEvent(event);
            String currentPackage = event.getPackageName();
            int eventType = event.getEventType();
            long eventTime = event.getTimeStamp();
            Log.d("||||------>", currentPackage + " " + target + " " + new SimpleDateFormat("yyyy/MM/dd HH:mm:ss", Locale.getDefault()).format(new Date(eventTime)) + " " + eventType);
            if (currentPackage.equals(target)) { // 本次交互开始
                Log.d("||||||||||>", currentPackage + " " + target + " " + new SimpleDateFormat("yyyy/MM/dd HH:mm:ss", Locale.getDefault()).format(new Date(eventTime)) + " " + eventType);
                // 记录第一次开始时间
                if (eventType == UsageEvents.Event.MOVE_TO_FOREGROUND) {
                    Log.d("********", "start " + start);
                    if (start == 0) {
                        start = eventTime;
                        item.mEventTime = eventTime;
                        item.mEventType = eventType;
                        item.mUsageTime = 0;
                        items.add(item.copy());
                    }
                } else if (eventType == UsageEvents.Event.MOVE_TO_BACKGROUND) { // 结束事件
                    if (start > 0) {
                        prevEndEvent = new ClonedEvent(event);
                    }
                    Log.d("********", "add end " + start);
                }
            } else {
                // 记录最后一次结束事件
                if (prevEndEvent != null && start > 0) {
                    item.mEventTime = prevEndEvent.timeStamp;
                    item.mEventType = prevEndEvent.eventType;
                    item.mUsageTime = prevEndEvent.timeStamp - start;
                    if (item.mUsageTime <= 0) item.mUsageTime = 0;
                    if (item.mUsageTime > AppConst.USAGE_TIME_MIX) item.mCount++;
                    items.add(item.copy());
                    start = 0;
                    prevEndEvent = null;
                }
            }
        }
    }
    return items;
}
 
Example #23
Source File: UseTimeEveryDetailAdapter.java    From UseTimeStatistic with MIT License 4 votes vote down vote up
public UseTimeEveryDetailAdapter(ArrayList<UsageEvents.Event> mOneTimeDetailEventInfoList) {
    this.mOneTimeDetailEventInfoList = mOneTimeDetailEventInfoList;
}