监控最近的应用程序

时间:2012-02-26 11:05:00

标签: android android-intent

我正在编写一个应用程序,用于监控我在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小时,可能会有一个被多次调用的应用,然后我只会将其视为一个。

有没有办法在给定时间间隔的情况下接收启动应用的次数?

我知道这是一个具体的问题,但如果有人遇到类似的问题,那将会有所帮助。 (也许有意图?)

2 个答案:

答案 0 :(得分:0)

我没有使用过小部件,但也许您可以将应用程序设置为一个。然后每次打开一个应用程序以添加到与该应用程序绑定的int。

答案 1 :(得分:0)

试试这个,但有一些间隔。

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;
}

}