I want to write an application that logs the usage of other applications on my phone.
So for example I get the times I have entered Facebook.
I understand there is no way to get a broadcastreceiver to wake up every time Facebook starts. Another way is to have a service that always runs in the background and checks for running apps and goes to sleep every second or so, but I guess this will drain my battery faster.
So what is the best way this could be done? is there some kind of log I can look at?
The only way to monitor other apps is by monitoring foreground activity. This will drain your battery but there is no broadcast when other apps are launched and hence no other way to do it. You would like to start a timer task that checks the current foreground activity. I would highly recommend not to do it. To get current foreground activity use the following code:
ActivityManager am = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);
List< ActivityManager.RunningTaskInfo > taskInfo = am.getRunningTasks(1);
Log.d("topActivity", "CURRENT Activity ::"
+ taskInfo.get(0).topActivity.getClassName());
ComponentName componentInfo = taskInfo.get(0).topActivity;
componentInfo.getPackageName();
You will need the following permission:
<uses-permission android:name="android.permission.GET_TASKS"/>
来源:https://stackoverflow.com/questions/17629053/how-do-android-monitor-usage-applications-work