2013-05-06 2 views
7

나는 안드로이드를 처음 사용하고 있습니다. 내 응용 프로그램에서, 나는 (장치에 설치된) 다른 응용 프로그램이 (포 그라운드에서) 사용 된 시간을 추적하려고합니다.안드로이드 애플리케이션의 소요 시간 측정

가능합니까? 그렇다면 어떻게?

미리 감사드립니다.

+2

[this] (http://stackoverflow.com/questions/6064137/can-an-android-application-know-when-another-android-application-is-running) 링크가 도움이되는지 확인하십시오. – Hemanth

+0

단어를 클릭하십시오 ... 하이퍼 링크입니다 :) – Hemanth

답변

2

백그라운드 서비스를 사용하고 어떤 앱이 포어 그라운드에 있는지 지속적으로 검색하여이를 수행하는 유일한 방법이라고 생각합니다 (ActivityManager를 사용하여 가능함).

당신은 전경 감지 할 수/배경 응용 프로그램 ActivityManager.getRunningAppProcesses()을 함께 :

그러나이 솔루션은 배터리

4

우선에 비용이 많이 드는, 즉 포 그라운드에서 실행중인 응용 프로그램을 무엇 여기에 알려질 필요가 있어요 요구. Determining foreground/background processes :

그래서, 당신은 아마뿐만 아니라이 문제를 확인하실 수 있습니다처럼 ::

class findForeGroundProcesses extends AsyncTask<Context, Void, Boolean> { 

     @Override 
     protected Boolean doInBackground(Context... params) { 
     final Context context = params[0].getApplicationContext(); 
     return isAppOnForeground(context); 
     } 

     private boolean isAppOnForeground(Context context) { 
     ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); 
     List<RunningAppProcessInfo> appProcesses = activityManager.getRunningAppProcesses(); 
     if (appProcesses == null) { 
      return false; 
     } 
     final String packageName = context.getPackageName(); 
     for (RunningAppProcessInfo appProcess : appProcesses) { 
      if (appProcess.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND && appProcess.processName.equals(packageName)) { 
      return true; 
      } 
     } 
     return false; 
     } 
    } 

    // Now you call this like: 
    boolean foreground = new findForeGroundProcesses().execute(context).get(); 

보일 것입니다.

는 당연한를 실행하는 과정에서 소요되는 시간을 측정하려면이 방법을 사용할 수 있습니다 :

getElapsedCpuTime() 

article를 참조하십시오.

+0

답변 해 주셔서 감사합니다. 나는 그것을 시도 할 것이다! – Unnati