2016-08-16 3 views
3

UsageShatsManager를 사용하여 Nexus 5에서 마셜을 사용하여 포 그라운드 앱을 가져 오려고합니다. 나는 그것이 작동하는 데 사용 기억하지만, 어떤 이유로 패키지/클래스 이름에 대한 null 문자열을 지금지고 있어요.UsageStatsManager를 사용하여 포 그라운드 앱 가져 오기

는 몇 가지 이유로 내 구현

public String[] getForegroundPackageNameClassNameByUsageStats() { 
    String packageNameByUsageStats = null; 
    String classByUsageStats = null; 
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
     UsageStatsManager mUsageStatsManager = (UsageStatsManager)getSystemService("usagestats");      
     final long INTERVAL = 1000; 
     final long end = System.currentTimeMillis(); 
     final long begin = end - INTERVAL; 
     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(); 
       classByUsageStats = event.getClassName(); 
       Log.d(TAG, "packageNameByUsageStats is" + packageNameByUsageStats + ", classByUsageStats is " + classByUsageStats); 
      } 
     } 
    } 
    return new String[]{packageNameByUsageStats,classByUsageStats}; 
} 

, 그것은이 while 루프로하지 않는, 즉 usageEvents.hasNextEvent()는 false입니다. 이 때문에 null 패키지/클래스 이름을 반환합니다.

내가 뭘 잘못하고 있는지 아는 사람이 있습니까?

감사합니다.

+0

대부분의 사람들은 테스트 할 때 자주 작동하는 응용 프로그램을 빠르게 확인하도록 전환하기 때문에 작동한다고 생각합니다. 전경 앱의 마지막 변경이 오래되었을 때 문제가 발생합니다. – FrankKrumnow

답변

2

좋아요, 그래서 나는 1000 대신 10000으로 간격을 설정 한 것을 발견했습니다. 분명히 1s 간격이 너무 작습니다.

1

본인이 직접 사용하고 있습니다. 응용 프로그램이 포 그라운드로 오면 사용 통계가 업데이트 될 것입니다. 그래서 포어 그라운드 앱이 '시작'타임 스탬프 전에 포 그라운드에 도착했다면 (그리고 머물렀다가) 얻지 못할 것입니다. :(

한편

당신이 전에 당신이 당신은 단지 전경 응용 프로그램을 결정하는 데 가장 시간이 필요 거대한 목록을 얻을 것이다 오랜 시간을 사용합니다.

그래서 나는 다른 3를 만들 수 있습니다 내가 뭘 시간 : 1 분, 1 시간 전, 12 시간 전

1 분에 빈 목록이 생기면 1 시간 씩 요청을 반복합니다. 그런 식으로 대부분의 시간 동안 전경을 얻습니다. 모든 일을 할 수 있습니다.

나는 패키지 관리자에게 앱이 전경 (안드로이드 5 이전)인데, 새로운 방식은 다소 지저분합니다.

관련 문제