他のアプリ(パッケージ)からもアクセスできる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
- aidlファイルを作成し、コード(interface)を自動生成する。ADTで開発しているのであれば、ファイルを作成した時点で自動的にgenへ生成される。
- aidlファイルから自動生成したinterfaceのStubを実装する。
- Serviceを実装し、onBind()の戻り値として、先ほど作成したStubを返すようにする。
- AndroidManifest.xmlに作成したServiceを定義する。
- パッケージを端末へインストールする。
Remote Client(利用側)
cw-advandroid/AdvServices/RemoteClient at master · commonsguy/cw-advandroid · GitHub
- Remote Service(提供側)の方で作成したaidlファイルを組み込み、interfaceを自動生成する。
- ServiceConnectionを実装し、onServiceConnected()でinterfaceのStubを取得する。
- bindService()でServiceを起動する。引数には先ほど作成したServiceConnectionを渡す。
- Stubのメソッドをコールする。
ちなみにClientではAndroidManifest.xmlにServiceを定義する必要なし。
備考
- Remote Client(利用側)では依存パッケージがインストールされているか確認が必要になるはず。