2016-12-15 3 views
0

私のAndroid携帯で各活動が生きていた前景時間を取得しようとしています。getSystemService(Context.USAGE_STATS_SERVICE)を実行しているときに重複しているPackageNames。

@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) 
    public List<UsageStats> getUsageStats() { 
     UsageStatsManager mUsageStatsManager = (UsageStatsManager) getActivity() 
       .getSystemService(Context.USAGE_STATS_SERVICE); 
     Calendar cal = Calendar.getInstance(); 
     cal.add(Calendar.DATE, -1); 
     List<UsageStats> queryUsageStats = mUsageStatsManager 
       .queryUsageStats(UsageStatsManager.INTERVAL_DAILY, cal.getTimeInMillis(), 
         System.currentTimeMillis()); 


     return queryUsageStats; 
    } 

を次のように私は実行コードがあり、これはprint文

for(UsageStats usageStats:getUsageStats()){ 
    Log.i("Usage Stats",usageStats.toString()+"\t"+usageStats.getPackageName()+"\t"+usageStats.getTotalTimeInForeground()); 
} 

されており、次のように私が得る結果は。

com.whatsapp 2413684 
com.google.android.googlequicksearchbox 2344707 
com.google.android.youtube  1786804 
com.google.android.googlequicksearchbox 1683449 
com.google.android.googlequicksearchbox 1577473 
com.whatsapp 1040572 

whatsappとgoogleの検索ボックスには2回あり、フォアグランドタイムが異なるため、

なぜ私はそれを2回取得しているのか誰に教えてもらえますか?また、ForeGroundにアクティビティがあった時間だけを取得する方法があります。

答えて

0

のコマンドを実行している:

adb shell "ps -x | grep google" 

私は次の出力(切り捨て)を取得:

u0_a22 1977 1267 1480140 46296 ep_poll 0000000000 S com.google.android.googlequicksearchbox:interactor (u:2, s:7) 
u0_a22 2115 1267 1895332 210352 ep_poll 0000000000 S com.google.android.googlequicksearchbox:search (u:1866, s:7987) 

googlequicksearchboxアプリケーションが2つの異なるプロセスで実行されていることを意味する(プロセス名でdiffrentiatedおよびPID)。

フォアグラウンドプロセスの時間です。これが意味するものはhereと記載されています。それだけでは意味がありません。

一般的に、アプリが簡単な方法で開かれたときに、時間を得る方法はありません。これは、アプリケーションにアクティビティ、サービス、定数通知が表示されるためです。これらのすべてがユーザーエクスペリエンスに影響を与える可能性があります。 Facebookのチャットヘッドを検討してください。それらは画面の角にあり、ユーザーに見えるかもしれませんが、別のアプリケーションが開かれています(その1つのアクティビティはonResumeイベントの後です)。しかし、Facebookはフォアグラウンドで動作しています。したがって、フォアグラウンドに少なくとも2つの実行中のアプリケーションがあります。

解決策は、パッケージ名がまったく同じ場合は結果を集計するだけです。あるいは、実行中のアプリケーションをしばらく確認しながら、バックグラウンドで常時サービスを実行する方法もあります。しかし、それはより時間と労力を要する解決策です。

関連する問題