他のアプリ(パッケージ)からもアクセスできるServiceを作る

サンプルと要点


unable to bind to a service -
Android Developers |
Google Groups
の一番最後に実装例が紹介されていた。要はAIDL(Android Interface Definition Language)を用意すればOK。

Remote Service(提供側)

cw-advandroid/AdvServices/RemoteService at master · commonsguy/cw-advandroid · GitHub

  1. aidlファイルを作成し、コード(interface)を自動生成する。ADTで開発しているのであれば、ファイルを作成した時点で自動的にgenへ生成される。
  2. aidlファイルから自動生成したinterfaceのStubを実装する。
  3. Serviceを実装し、onBind()の戻り値として、先ほど作成したStubを返すようにする。
  4. AndroidManifest.xmlに作成したServiceを定義する。
  5. パッケージを端末へインストールする。
Remote Client(利用側)

cw-advandroid/AdvServices/RemoteClient at master · commonsguy/cw-advandroid · GitHub

  1. Remote Service(提供側)の方で作成したaidlファイルを組み込み、interfaceを自動生成する。
  2. ServiceConnectionを実装し、onServiceConnected()でinterfaceのStubを取得する。
  3. bindService()でServiceを起動する。引数には先ほど作成したServiceConnectionを渡す。
  4. Stubのメソッドをコールする。

ちなみにClientではAndroidManifest.xmlにServiceを定義する必要なし。

備考