2012-02-26 5 views
1

Я пишу приложение, которое контролирует, какие приложения я использую больше всего на своем устройстве Android.Мониторинг последних приложений

Для этого я использую:

final ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); 
    final List<RecentTaskInfo> recentTasks = activityManager.getRecentTasks(20, ActivityManager.RECENT_WITH_EXCLUDED); 

    for (int i = 0; i < recentTasks.size(); i++) { 

     Intent baseIntent = recentTasks.get(i).baseIntent; 
     if(baseIntent != null) { 

      Log.d("Text", "Lior: Application executed: " + i + ": baseIntent: " + baseIntent.getComponent().getPackageName() + baseIntent.getComponent().getClassName()); 

     } 

Проблема с этим состоит в том, что это только дает мне недавние приложения, а не то, сколько раз было начато каждое приложение.

Чтобы проверить последнее приложение, я проверяю, было ли последнее приложение более последним, чем в последний раз, когда я проверил - таким образом, я знаю, что он был запущен.

Учитывая промежуток времени около 3 часов от каждого звонка, может быть приложение, которое было вызвано более одного раза, и тогда я буду считать его только одним.

Есть ли способ получить, сколько раз приложение запускалось с учетом временного промежутка?

Я знаю, что это конкретный вопрос, но если кто-нибудь столкнулся с чем-то подобным, это было бы полезно. (возможно, что-то с намерением?)

ответ

0

Я не играл с виджетами, но, возможно, вы могли бы настроить приложение как одно. Затем каждый раз, когда приложение открывается для добавления к привязке к этому приложению.

0

Попробуйте это, но есть несколько inter apis.

private void setActivityController() { 
    IActivityManager am = ActivityManagerNative.getDefault(); 
    try { 
     am.setActivityController(new ActivityController()); 
    } catch (RemoteException e) { 
     e.printStackTrace(); 
    } 
} 




public class ActivityController extends IActivityController.Stub { 

private static final String TAG = ActivityController.class.getSimpleName(); 

@Override 
public boolean activityResuming(String pkg) throws RemoteException { 
    Log.e(TAG, "activityResuming -- "+pkg); 
    return true; 
} 

@Override 
public boolean activityStarting(Intent intent, String pkg) 
     throws RemoteException { 
    Log.e(TAG, "activityStarting -- "+pkg+" intent="+intent); 
    return true; 
} 

@Override 
public boolean appCrashed(String processName, int pid, String shortMsg, String longMsg, 
     long timeMillis, String stackTrace) throws RemoteException { 
    Log.e(TAG, "appCrashed -- "+processName); 
    return true; 
} 

@Override 
public int appEarlyNotResponding(String processName, int pid, String annotation) 
     throws RemoteException { 
    Log.e(TAG, "appEarlyNotResponding -- "+processName); 
    return 0; 
} 

@Override 
public int appNotResponding(String processName, int pid, String processStats) 
     throws RemoteException { 
    Log.e(TAG, "processName -- "+processName); 
    return 0; 
} 

}

Смежные вопросы