2013-03-08 4 views
6

Bevor ich beginne, ist dies für unser eigenes Android-Gerät und nicht für ein Telefon oder für die Bereitstellung an anderer Stelle gedacht.Starten eines Android-init.rc-Dienstes von einer Aktivität

Wir haben einen Dienst in init.rc, der ein postgresql-Datenbankserver ist. Dies startet beim Start und läuft immer im Hintergrund für das System. Es besteht die Möglichkeit, dass es jedoch geschlossen wird und wir möchten eine Möglichkeit haben, diesen Dienst von der Android-Seite des Systems anzuhalten und zu starten.

Gibt es eine Möglichkeit, einen Init-Startbefehl von einer Android-Aktivität zu senden? Von einer Root-Shell aus wäre dies äquivalent zur Ausführung von "start servicename" und "stop servicename".

Antwort

11

einen Dienst zu starten, die in der init.rc Datei deklariert ist, denke ich, müssen Sie die "ctl.start" Systemeigenschaft mit folgenden Befehle ändern:

In c-Datei:

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

in Java:

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

Dies bedeutet, dass Ihre Aktivität Systemberechtigungen (im Manifest) hat:

android:sharedUserId="android.uid.system" 

und wird vom Systemschlüssel (oder setzen Plattform in der Android.mk)

Wie Sie unterzeichnet erraten, den Dienst zu nutzen folgenden Befehle zu stoppen:

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

oder

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

Tut mir leid, ich habe das bis jetzt nicht bemerkt. Mit "put platform in the Android.mk" ist das etwas, das nur für C-Apps auf Android läuft? Und für den Systemschlüssel bedeutet das, dass Sie das APK für jedes System separat erstellen müssen, auf dem Sie es bereitstellen würden? – ekthomson

+1

Ich denke nach dem Systemschlüssel, das bedeutet, dass wir das gesamte Android-System für die Hardware aufbauen müssten, wenn wir diese Methode nutzen wollten, um unseren Dienst zu starten. Ich denke, das würde es für unsere Bedürfnisse im Moment nutzlos machen, weil wir nicht genug Treiber für die Hardware haben, um es selbst zu bauen, und wir verlassen uns auf den Hersteller des SoM, um es zu bauen. Danke für die Antwort. Ich werde mit dem Hersteller der SoM überprüfen und sehen, ob sie uns einen vollständigeren Build-Baum mit den enthaltenen Treibern gibt. – ekthomson