【问题标题】:Android Intent FiltersAndroid 意图过滤器
【发布时间】:2015-05-14 03:48:52
【问题描述】:

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

1.定义粘性服务并持续检查正在使用的应用程序是一种选择,但会消耗大量电池。

2.我想到的另一种可能的方法是实现广播接收器。我们可以将意图过滤器设置为 SET_ALARMRECEIVE 等操作。Android 为每个可能的事件提供了操作,例如发送消息或接收语音邮件。

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

如果是这样,我将只从我的广播接收器运行一个意图服务,这将完成其余的工作,而无需像我在第 1 点中提到的那样连续轮询应用程序是否已打开。

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

【问题讨论】:

  • 嘿,你在回答问题或提问吗?不清楚...
  • 我提供了一个我想到的解决方案。
  • 是的,您可以监控已安装的应用程序,就像您可以获取所有已安装应用程序的详细信息...它们的内存使用情况、安装日期、上次更新日期,您还可以从您的应用程序中打开该应用程序,您还可以杀死他们的后台进程等等....但是如果您想在已安装的应用程序之一打开时发出一些警报,那么在这种情况下您不能这样做....因为其他已安装的应用程序不共享他们的意图过滤器......

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


【解决方案1】:

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

// 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 轮询您感兴趣的应用的状态。

【讨论】:

  • 感谢您的指导。我将开始在这条线上工作。 !
猜你喜欢
  • 1970-01-01
  • 2012-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多