2013-03-08 47 views
6

在我開始之前,這是爲我們自己的基於android的設備而設計的,而不是針對手機或其他地方的部署。從一個Activity開始一個Android init.rc服務

我們在init.rc中有一個服務,它是一個postgresql數據庫服務器。這在啓動時啓動,並始終在系統的後臺運行。有可能它會關閉,但我們希望有一種方法可以停止並從系統的Android端啓動此服務。

有沒有辦法從android活動發送init啓動命令?從根shell中,這將相當於運行「start servicename」和「stop servicename」。

回答

11

要開始這是在init.rc文件中聲明的服務,我想你必須用下面的命令改變「ctl.start」系統屬性:

在C文件:

property_set("ctl.start", "<service_name>"); 

在java中:

SystemProperties.set("ctl.start", "<service_name>"); 

這意味着您的活動具有系統權限(在清單):

android:sharedUserId="android.uid.system" 

,並通過系統按鍵(或將平臺在Android.mk)簽署

正如您可以猜到,停止以下命令服務使用:

property_set("ctl.stop", "<service_name>"); 

SystemProperties.set("ctl.stop", "<service_name>"); 
+0

對不起,我直到現在才注意到這一點。通過「在Android.mk中放置平臺」是僅僅適用於在Android上運行的C應用程序的東西?對於系統密鑰,這是否意味着您必須爲將要部署到的每個系統分別構建APK? – ekthomson 2013-10-10 20:58:34

+1

我猜系統密鑰,這意味着如果我們想要使用這種方法來啓動我們的服務,我們需要真正構建硬件的整個android系統。我認爲這會使我們目前的需求大多無用,因爲我們沒有足夠的硬件驅動程序來自己構建它,並且我們依靠SoM的製造商來構建它。但感謝您的答案。我會和SoM的製造商覈實一下,看看他們能否給我們一個更完整的包含驅動程序的構建樹。 – ekthomson 2013-10-10 21:05:22