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"/>