我正在编写一个应用程序,用于监控我在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)
我没有使用过小部件,但也许您可以将应用程序设置为一个。然后每次打开一个应用程序以添加到与该应用程序绑定的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;
}
}