Android意图过滤器

时间:2015-03-12 04:56:49

标签: android android-intent service intentfilter device-admin

我要求我的应用程序监视Android设备上已安装的应用程序,并获取当前正在前台运行的应用程序的详细信息。  我能想到的两种可能的解决方案是:

1.定义粘性服务并连续检查正在使用哪个应用程序将是一个选项,但会消耗大量电池。

2.我想到的另一种可能的方法是实现广播接收器。我们可以将intent-filter设置为 SET_ALARM RECEIVE 等操作.Android为每个可能的事件(如发送消息或接收语音邮件)提供了操作。

所以我的问题是启动应用程序是否存在操作

如果确实如此,我只会从我的广播接收器运行一个意向服务,这将完成其余的工作而不必连续轮询是否已经打开了应用程序,或者不像我在第1点中提到的那样。

任何人都可以帮助或提供替代解决方案吗?

1 个答案:

答案 0 :(得分:0)

是的,我想没有办法注册广播接收器来检测应用启动。其中一种方式(类似于你的建议):

// TO GET INSTALLED APPS
Intent intent = new Intent(Intent.ACTION_MAIN, null);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
List<ResolveInfo> packageList = getPackageManager().queryIntentActivities(intent, 0);
for (ResolveInfo resolveInfo : packageList) {
    Log.d("ResolveInfo", "Package: " + resolveInfo.activityInfo.packageName);
}

// TO GET INFO OF RUNNING PROCESSES
ActivityManager activityManager = (ActivityManager) this.getSystemService(Context.ACTIVITY_SERVICE);
List<RunningAppProcessInfo> runningAppProcessInfos = activityManager.getRunningAppProcesses();
for (RunningAppProcessInfo runningAppProcessInfo : runningAppProcessInfos) {
    Log.d("runningAppProcessInfo", "Running process name: " + runningAppProcessInfo.processName);
}

使用Service轮询您感兴趣的应用的状态。