2015-04-22 59 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

這正是我需要的,非常感謝!將進行測試並添加我的解決方案(我的確切代碼片段,我將根據您的有用鏈接進行編輯),以供任何人發現它有用。乾杯! :) –