2

Android で起動時にサービスを開始する必要があります。ブロードキャスト レシーバーは使用しません。C++ でサービスを作成しました。これは、外部デバイスと通信するためにドライバー libusb レイヤーにアクセスする必要があるためです。手動で開始した場合、サービスは正常に動作します。起動時にサービスを開始したいということは、Androidでinir.rcファイルを編集する必要があることを意味します.しかし、問題は、すべてのデバイスでinit.rcを編集できないことです. サービスを Sytem/bin の場所に配置し、init.rc ファイルを次のように編集します。

service sampleservice/system/bin/sampleservice
              oneshot
              disable

手動で、このような端末からサービスを開始しました

#./system/bin/sampleservice

しかし、システムの再起動時にinit.rcを編集せずに起動時にサービスを開始するという考えがあるたびにサービスを開始することはできません

4

2 に答える 2

1

私の知る限り (NDK リファレンス、google-ndkなどの Google グループ、android-developersなど)、.NET 以外のサービスとしてネイティブ バイナリを開始する信頼できる方法はありませんinit.rc

特定のユース ケースでは、http: //developer.android.com/guide/topics/connectivity/us/index.htmlで説明されている USB SDKを試してみてください。しかし、これでは不十分な場合、または 10 未満の OS API レベルをサポートしたい場合は、目的を達成するための簡単な方法はないと思います。

あなたのサービスが重要でない(つまり、システムがサービスに依存していない) ことを前提として、ADT を使用して作成する通常の Android アプリケーションを作成するようにアドバイスするいくつかのスレッドをこことグループで見ました。それは最小限で、以下を含みます:

  • パッケージ化されたネイティブ ライブラリとしての C++ サービス
  • システムの起動後に通知を受信するブロードキャスト レシーバー (ここで説明されているように: http://www.androidenea.com/2009/09/starting-android-service-after-boot.html )。このレシーバーは、ネイティブ サービスを開始するだけです。

この方法は、root 化されていないデバイスにサービスをインストールする必要がある場合にも推奨されています。ただし、試したことはありません。大したことではないことは承知していますが、この件に関して私が知っていることを共有したかったのです。

于 2013-02-12T11:18:52.987 に答える
-1

サービスを開始する前に、fsが起動していることを確認する必要があると思います。ソースからコンパイルできる場合は、初期化コード自体で情報ログを有効にすることをお勧めします。

BRサブブ

于 2013-02-12T11:54:11.303 に答える