2016-04-12 14 views
2

Ich bin unten Code Top Aktivität zu erhaltenWie Top Aktivität in Android bekommen 5.0 +

private String getTopPackageName() { 
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { 
     return activityManager.getRunningTasks(1).get(0).topActivity.getPackageName(); 
    } else { 
     final List<ActivityManager.RunningAppProcessInfo> pis = activityManager.getRunningAppProcesses(); 
     for (ActivityManager.RunningAppProcessInfo pi : pis) { 
      if (pi.pkgList.length == 1) return pi.pkgList[0]; 
     } 
    } 
    return ""; 
} 

Es Wort auf API < 21 aber API> = 21 zurückgeben "" :( Anfahrt ? dass ich werde versuchen:

private void printForegroundTask() { 
String currentApp = "NULL"; 
if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) { 
    UsageStatsManager usm = (UsageStatsManager) this.getSystemService(Context.USAGE_STATS_SERVICE); 
    long time = System.currentTimeMillis(); 
    List<UsageStats> appList = usm.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, time - 1000*1000, time); 
    if (appList != null && appList.size() > 0) { 
     SortedMap<Long, UsageStats> mySortedMap = new TreeMap<Long, UsageStats>(); 
     for (UsageStats usageStats : appList) { 
      mySortedMap.put(usageStats.getLastTimeUsed(), usageStats); 
     } 
     if (mySortedMap != null && !mySortedMap.isEmpty()) { 
      currentApp = mySortedMap.get(mySortedMap.lastKey()).getPackageName(); 
     } 
    } 
} else { 
    ActivityManager am = (ActivityManager)this.getSystemService(Context.ACTIVITY_SERVICE); 
    List<ActivityManager.RunningAppProcessInfo> tasks = am.getRunningAppProcesses(); 
    currentApp = tasks.get(0).processName; 
} 

Log.e(TAG, "Current App in foreground is: " + currentApp); 

}

ABER NULL zurück :(bitte helfen Sie mir dank

+0

'getRunningTasks' veraltet. –

+0

Ich weiß das aber wenn stattdessen der UsageStatsManager nicht funktioniert? Es null zurück, ich etwas verpasst haben, aber ich weiß nicht :( –

Antwort

0

Sie können auch Accessibility Services verwenden, aber dafür müssen Sie die Benutzer auf die Zugänglichkeit Einstellungen umleiten, um ihn einzuschalten. Beispielcode ist unten, um das Paket der App, die gerade geöffnet wurde oder in Ihrem Fall die Top-Aktivität zu bekommen.

public class MyAccessibilityService extends AccessibilityService { 

    @Override 
    public void onAccessibilityEvent(AccessibilityEvent event) { 
      String packageName = event.getPackageName(); 

     } 
    } 
+0

Great Du sparst meinen Tag. –

1

getRunningTasks() in API-Ebene 21 (Lollipop) ist veraltet

Als alternative Sie dieses

List<ActivityManager.RunningAppProcessInfo> task = manager.getRunningAppProcesses(); 
ComponentName componentInfo = task.get(0).importanceReasonComponent; 
String packageName = componentInfo.getPackageName() 

Hinweis tun können:

diese Methode nur für die Fehlersuche und präsentiert Aufgabe gedacht Management-Benutzerschnittstellen. Dies sollte niemals für Kernlogik in einer Anwendung verwendet werden, z. B. die Entscheidung zwischen verschiedenen Verhaltensweisen basierend auf den hier gefundenen Informationen.

Refer the doc

UPDATE:

ActivityManager manager = (ActivityManager) MainActivity.this.getSystemService(Context.ACTIVITY_SERVICE); 
    List<ActivityManager.RunningAppProcessInfo> task = manager.getRunningAppProcesses(); 
    ActivityManager.RunningAppProcessInfo runningAppProcessInfo = null; 

    for(ActivityManager.RunningAppProcessInfo singleTask : task){ 
     if(singleTask.importanceReasonComponent !=null){ 
      runningAppProcessInfo = singleTask; 
      break; 
      } 
    } 

    if(runningAppProcessInfo!=null) { 
     ComponentName componentInfo = runningAppProcessInfo.importanceReasonComponent; 
     String packageName = componentInfo.getPackageName(); 
     Log.d("myPackageName", packageName); 
    } 
+0

ich hatte, dass: private String getTopPackageName() { if (Build.VERSION.SDK_INT pis = activityManager.getRunningAppProcesses(); für (ActivityManager.RunningAppProcessInfo pi: pis) { if (pi .pkgList.length == 1) gib pi zurück.pkgList [0]; } } zurück ""; } –

+0

aber nicht :( –

+0

arbeiten, was tut er zurückkehrt? Null? –

0

brauchen Sie die Erlaubnis "PACKAGE_USAGE_STATS" für UsageStatsManager verwenden:

„Diese API erfordert die Erlaubnis android.permission.PACKAGE_USAGE_STATS, die ein System-Level-Berechtigung und wird nicht gewährt, Apps von Drittanbietern. Die Deklaration der Berechtigung impliziert jedoch die Absicht, die API zu verwenden, und der Benutzer des Geräts kann die Berechtigung über die Anwendung "Einstellungen" erteilen. "

Siehe: https://developer.android.com/reference/android/app/usage/UsageStatsManager.html

Verwandte Themen