2015-08-11 17 views
10

Sadece uygulamamı ve CM, ATM Android Assistant'ı test ettim. Bunların hepsi çalışan işlem listesini alamıyor, ancak ön işletim sistemi sürümünde iyi çalışıyorlar. Peki Android M (5.1.1) ile neler oluyor? lütfen yardım et!getRunningAppProcesses, Android M (5.1.1) boş bir liste döndürür

am = (ActivityManager) getContext().getSystemService(Context.ACTIVITY_SERVICE); 
List<RunningAppProcessInfo> list = am.getRunningAppProcesses(); 
Log.i(TAG, "LQ::examine list.size()=" + list.size()); 
+0

"Peki Android 5.1.1 Lolipop ile neler oluyor?" ve Android 5.1.1 Lollipop ile neler oluyor? sonuç ne? – pskink

+0

5.1.1'de Görev Listesi Çalışmasını alamıyorum. BUt pre os sürümünde iyi çalışıyor. – thecr0w

+0

Yani 'getRunningAppProcesses' veya' getRunningTasks'? Neyin çalışmadığına karar verebilir misin? – pskink

cevap

5

Bunun yerine getRunningServices kullanmaya karar veriyorum!

Du Hız Yükseltici & Power Clean, getRunningServices kullanır, belki getRunningAppProcesses ileride kullanımdan kaldırılmıştır.

Teşekkürler google, teşekkürler alfabe.

Hashtable<String, List<ActivityManager.RunningServiceInfo>> hashtable = new Hashtable<String, List<ActivityManager.RunningServiceInfo>>(); 
    ActivityManager am = (ActivityManager) getContext().getSystemService(Context.ACTIVITY_SERVICE); 
    for (ActivityManager.RunningServiceInfo rsi : am.getRunningServices(Integer.MAX_VALUE)) { 
     if (isCanceled()) { 
      return; 
     } 

     String pkgName = rsi.service.getPackageName(); 
     if (hashtable.get(pkgName) == null) { 
      List<ActivityManager.RunningServiceInfo> list = new ArrayList<ActivityManager.RunningServiceInfo>(); 
      list.add(rsi); 
      hashtable.put(pkgName, list); 
     } else { 
      hashtable.get(pkgName).add(rsi); 
     } 
    } 

    int i = 0; 
    int size = hashtable.size(); 
    for (Iterator it = hashtable.keySet().iterator(); it.hasNext(); i++) { 
     String key = (String) it.next(); 
     List<ActivityManager.RunningServiceInfo> value = hashtable.get(key); 
     ProcessItem item = new ProcessItem(getContext(), value.get(0).pid, key, totalCpu, totalRam); 
     if (!whiteList.contains(item.pkgName)) { 
      if (!killList.contains(item.pkgName)) { 
       killList.add(item.pkgName); 
       ramTotal += item.ram; 

       if (getListener() != null) { 
        Progress progress = new Progress(this); 
        progress.setArg1(i); 
        progress.setArg2(size); 
        progress.setMsg(item.appName); 
        progress.setObj(item); 
        getListener().onExamining(progress); 
       } 
      } 
     } 
    } 
    hashtable.clear(); 
    hashtable = null; 
+1

getRunningServices çalışan tüm uygulama süreçlerini nasıl döndürecek? Eğer yanılmıyorsa, sadece geri dönen servisler – Lester

+2

@ Lester, Biz ATK gibi bir süreç katil uygulamasıyız, bu yüzden süreç veya hizmet gibi şeyler çalıştırmaya ihtiyacımız var. – thecr0w

1

Başka bir seçenek UsageStatsManager kullanmaktır. Bunun çalışması için Amacıyla

UsageStatsManager mUsageStatsManager = (UsageStatsManager)getSystemService(Context.USAGE_STATS_SERVICE); 
long endTime = System.currentTimeMillis(); 
long beginTime = endTime - 1000*60; 

// We get usage stats for the last minute 
List<UsageStats > stats = mUsageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, beginTime, endTime); 

// Sort the stats by the last time used 
if(stats != null) 
{ 
    SortedMap<Long,UsageStats> mySortedMap = new TreeMap<Long,UsageStats>(); 
    for (UsageStats usageStats : stats) 
    { 
     mySortedMap.put(usageStats.getLastTimeUsed(),usageStats); 
    } 
    if(mySortedMap != null && !mySortedMap.isEmpty()) 
    { 
     topActivity = mySortedMap.get(mySortedMap.lastKey()).getPackageName(); 
    } 
} 

, sen PACKAGE_USAGE_STATS izin gerekir. Ayarlarda ekran açarak bunu yapmak için kullanıcıyı uyararak:

Intent usageAccessIntent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS); 
usageAccessIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
startActivity(usageAccessIntent); 
+0

Haklısın, ama topActivity ihtiyacım olan şey değil. – thecr0w

+0

Kodunuz derlenmiyor. –

0

Ben android 6.0 üzerinde getRunningServices() yöntemini kullanarak ön plan uygulama listesini alabilir. Thanks @ thecr0w

ActivityManager mActivityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); List appProcessInfoList = mActivityManager.getRunningServices(Integer.MAX_VALUE); 
İlgili konular