2013-03-08 6 views
6

私が起動する前に、これは私たち自身のアンドロイドベースのデバイスのためのものであり、電話機や他の場所のデプロイメント用ではありません。アクティビティからAndroid init.rcサービスを開始する

私たちはinit.rcにpostgresqlデータベースサーバであるサービスを持っています。これは起動時に起動され、常にシステムのバックグラウンドで実行されます。しかし、閉鎖する可能性があり、システムのアンドロイド側からこのサービスを停止して開始する方法がありたいと考えています。

androidアクティビティからinit startコマンドを送信する方法はありますか?ルートシェルからは、 "start servicename"と "stop servicename"を実行するのと同じことになります。 Cファイルで

答えて

11

init.rcファイルで宣言されたサービスを開始するには、私は次のコマンドで「ctl.start」システムのプロパティを変更する必要があります考えて

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

Javaで:

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

これはあなたの活動は(マニフェストで)システム権限を持っていることを意味します210

android:sharedUserId="android.uid.system" 

、あなたはコマンド以下のサービスの利用を停止するには、推測することができ、あなたのシステムのキー(またはAndroid.mk入れるプラットフォーム)

によって署名されています

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

または

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

申し訳ありません申し訳ありませんが、これまで気づいていませんでした。 「Android.mkにプラットフォームを置く」とは、Android上で動作するCアプリのみのものですか? Systemキーの場合、それを展開するシステムごとにAPKを個別に構築する必要がありますか? – ekthomson

+1

私はシステムキーで推測しています。つまり、この方法を利用してサービスを開始するには、ハードウェア用のアンドロイドシステム全体を実際に構築する必要があります。ハードウェアがそれを構築するための十分なドライバを持っておらず、SoMの製造元に依存しているため、現時点で私たちのニーズにはほとんど役に立たないと思う。しかし、答えをありがとう。 SoMの製造元に確認し、ドライバが含まれているより完全なビルドツリーを提供できるかどうかを確認します。 – ekthomson

関連する問題