@Test public void testQueryEvents_emptyEvents() throws Exception { UsageEvents events = usageStatsManager.queryEvents(1000L, 2000L); Event event = new Event(); assertThat(events.hasNextEvent()).isFalse(); assertThat(events.getNextEvent(event)).isFalse(); }
@Implementation protected UsageEvents queryEvents(long beginTime, long endTime) { List<Event> results = ImmutableList.copyOf(eventsByTimeStamp.subMap(beginTime, endTime).values()); ArraySet<String> names = new ArraySet<>(); for (Event result : results) { names.add(result.mPackage); if (result.mClass != null) { names.add(result.mClass); } } String[] table = names.toArray(new String[0]); Arrays.sort(table); // We can't directly construct usable UsageEvents, so we replicate what the framework does: // First the system marshalls the usage events into a Parcel. UsageEvents usageEvents = new UsageEvents(results, table); Parcel parcel = Parcel.obtain(); usageEvents.writeToParcel(parcel, 0); // Then the app unmarshalls the usage events from the Parcel. parcel.setDataPosition(0); return new UsageEvents(parcel); }
Event event = new Event(); assertThat(events.hasNextEvent()).isTrue(); assertThat(events.getNextEvent(event)).isTrue(); assertThat(event.getPackageName()).isEqualTo(TEST_PACKAGE_NAME1); assertThat(event.getTimeStamp()).isEqualTo(1000L); assertThat(event.getEventType()).isEqualTo(Event.MOVE_TO_BACKGROUND); assertThat(events.hasNextEvent()).isTrue(); assertThat(events.getNextEvent(event)).isTrue(); assertThat(event.getPackageName()).isEqualTo(TEST_PACKAGE_NAME2); assertThat(event.getTimeStamp()).isEqualTo(1500L); assertThat(event.getClassName()).isEqualTo(TEST_ACTIVITY_NAME); assertThat(events.hasNextEvent()).isFalse(); assertThat(events.getNextEvent(event)).isFalse();
@Implementation protected UsageEvents queryEvents(long beginTime, long endTime) { List<Event> results = ImmutableList.copyOf(eventsByTimeStamp.subMap(beginTime, endTime).values()); ArraySet<String> names = new ArraySet<>(); for (Event result : results) { names.add(result.mPackage); if (result.mClass != null) { names.add(result.mClass); } } String[] table = names.toArray(new String[0]); Arrays.sort(table); // We can't directly construct usable UsageEvents, so we replicate what the framework does: // First the system marshalls the usage events into a Parcel. UsageEvents usageEvents = new UsageEvents(results, table); Parcel parcel = Parcel.obtain(); usageEvents.writeToParcel(parcel, 0); // Then the app unmarshalls the usage events from the Parcel. parcel.setDataPosition(0); return new UsageEvents(parcel); }
Event event = new Event(); assertThat(events.hasNextEvent()).isTrue(); assertThat(events.getNextEvent(event)).isTrue(); assertThat(event.getPackageName()).isEqualTo(TEST_PACKAGE_NAME1); assertThat(event.getTimeStamp()).isEqualTo(11000L); assertThat(event.getEventType()).isEqualTo(Event.MOVE_TO_BACKGROUND); assertThat(events.hasNextEvent()).isTrue(); assertThat(events.getNextEvent(event)).isTrue(); assertThat(event.getPackageName()).isEqualTo(TEST_PACKAGE_NAME2); assertThat(event.getTimeStamp()).isEqualTo(11500L); assertThat(event.getClassName()).isEqualTo(TEST_ACTIVITY_NAME); assertThat(events.hasNextEvent()).isFalse(); assertThat(events.getNextEvent(event)).isFalse();
/** * 获取前台应用包名(API >= 22) * <p>需要添加 {@code <uses-permission android:name="android.permission.PACKAGE_USAGE_STATS"/>} 权限</p> * * @param context * @return */ @TargetApi(Build.VERSION_CODES.LOLLIPOP_MR1) private static String getForegroundPackage4(Context context) { UsageStatsManager usageStatsManager = (UsageStatsManager) context.getSystemService(Context.USAGE_STATS_SERVICE); long endTime = System.currentTimeMillis(); long beginTime = endTime - 10 * 1000; UsageEvents.Event event = new UsageEvents.Event(); UsageEvents usageEvents = usageStatsManager.queryEvents(beginTime, endTime); while (usageEvents.hasNextEvent()) { usageEvents.getNextEvent(event); if (event.getEventType() == UsageEvents.Event.MOVE_TO_FOREGROUND) { result = event.getPackageName(); } } return result; } }
@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 ; } }
final UsageEvents usageEvents = mUsageStatsManager.queryEvents(begin, end); while (usageEvents.hasNextEvent()) { UsageEvents.Event event = new UsageEvents.Event(); usageEvents.getNextEvent(event); if (event.getEventType() == UsageEvents.Event.MOVE_TO_FOREGROUND) { packageNameByUsageStats = event.getPackageName();