2015-04-22 58 views
0

我想制作一个非常基本的应用程序,只要它运行,它就会检测每一帧更新,不同的应用程序是否在后台运行(一个应用程序在主屏幕区域不可见,只是在battery/wifi/simcard图标对面顶部的一个图标是不在全屏幕的时候,希望是有道理的,不知道顶部是什么吧)如何在停止运行时自动重新运行不同的已安装Android应用程序?

我有一个复选框,当在我的应用程序布局中选中时,它会在自动关闭时不断重新启动应用程序。如果未选中,它将允许应用程序关闭并保持正常关闭状态。这都假设我想检查并运行的第三方应用程序已经手动安装。

它甚至可以在后台运行,甚至在手机被锁定或处于睡眠模式时也可以运行,我可以自己编写这些东西,我相信。

所以这里的交易,我需要两个函数/方法/任何。一个检查现有已安装的应用程序是否正在运行的状态(我猜可以通过使用应用程序ID或类似的参数),即使它在我提到的背景中,也不需要检查窗口焦点,只是它现有的流程是否正在运行。

我需要运行基于它的id的应用程序的其他功能,如我说的检查其运行状态。

这里是一个模型来填补空洞点,如果我解释这个可怕的,注意我是新来的android java编程,但我认为我学习有点快,因为我已经有了C++的经验,所以它学习比编程新手少。

代码:

//check fires every step/update 
If (CheckIfAppIsRunning("com.compamy.company") == False) { // or 0, whatever java does idont have my pc or eclipse in front of me right now 
    RunApp("com.company.example"); 
} 

我还没有在一段时间做这个,但我敢肯定这应该是在这一个生病的所有需要​​。只需一个CheckIfAppIsRunning()和一个RunApp()函数。

谢谢! :D

回答

0

不幸的是,运行和不运行的概念在android中并不那么简单。

首先,Android通常会尽可能长时间保持应用程序流程,所以即使(停止的)应用程序也可以作为轻量级进程运行,以防用户想要重新启动应用程序。

这使得无法准确检测到哪个进程真的在运行,哪些没有进行。

但好消息是android会在可由其他组件重新启动的Service对象中执行后台工作。

因此,如果我是你,我会尝试使用Activity Manager并获取正在运行的服务的列表。并将它们与从Package Manager中抽取的已安装应用程序列表进行比较,以确定正在运行什么不是。

现在假设你想要重新启动一个特定的服务,并不是所有的服务都有公共接口来启动它们(在应用程序的manifest.xml中定义了公共意图),所以你可能需要启动整个应用程序,而这意味着两件事情:

  • 它会被带到最前面,无论用户在做什么都会被打断。
  • 如果设备处于空闲模式什么都不会发生。
+0

这正是我需要的,非常感谢!将进行测试并添加我的解决方案(我的确切代码片段,我将根据您的有用链接进行编辑),以供任何人发现它有用。干杯! :) –