
起動されたサービスはバックグラウンド操作に最適です。よりインタラクティブなサービスが必要な場合はどうでしょうか? この章では、アクティビティが対話できるサービスの一種である関連サービスを作成する方法を学びます。 リソースを節約するために、サービスにバインドする方法と、完了後にサービスをキャンセルする方法を学習します。 Android測位サービスは、デバイスのGPS受信機から位置情報を取得するのに役立ちます。 最後に、実行時の許可リクエストの処理を含む、Android許可モデルの使用方法を学習します。
関連サービスは他のコンポーネントにバインドします
第18章で述べたように、インテントが送信されると、開始するサービスが開始されます。 バックグラウンドでコードを実行し、操作が完了すると停止します。 そのようなサービスは、それらを起動したコンポーネントが破壊されても実行され続けます。
リンクされたサービスは、アクティビティなどの別のコンポーネントにバインドされます。 実行中のサービスとは異なり、コンポーネントは関連するサービスと対話し、そのメソッドを呼び出すことができます。
関連サービスがどのように機能するかを確認するために、走行距離計のように、マシンが移動した距離を測定する関連サービスを備えた新しいアプリケーションを作成します。 Android測位サービスは、距離の測定に使用されます。

私たちは何をするつもりですか
アプリケーション構築プロセスは、3つの主要なステップで構成されます。

走行距離計プロジェクトの作成
プロジェクトを作成することから始めましょう。 「Odometer」という名前、会社のドメイン「hfad.com」、およびパッケージcom.hfad.odometerの名前を使用して、アプリケーション用の新しいAndroidプロジェクトを作成します。 アプリケーションがほとんどのデバイスで動作するには、最小SDKレベルがAPI 19に等しくなければなりません。 「MainActivity」という名前の空のアクティビティと「activity_main」というレイアウトを作成して、コードが私たちのものと変わらないようにします。 アクティビティを作成するときは、必ず下位互換性(AppCompat)チェックボックスをオフにしてください。

このコードは、コンポーネント(アクティビティなど)がサービスにバインドする要求を発行したときに呼び出される1つのonBind()メソッドを実装します。 このメソッドは1つのIntentパラメーターを取り、IBinderオブジェクトを返します。 IBinderインターフェイスは、サービスをアクティビティに関連付けるために使用されます。 サービスコードでその実装を提供する必要があります。 次に、その方法を学習します。
IBinderの実装
IBinderを実装するには、(IBinderインターフェイスを実装する)Binderクラスを拡張するサービスコードに新しい内部クラスを追加します。 内部クラスには、関連サービスへの参照を取得するためにアクティビティで使用されるメソッドを含める必要があります。
OdometerServiceへの参照を取得するためにMainActivityによって使用されるOdometerBinderクラスを定義します。 定義のコードは次のようになります。

MainActivityをOdometerServiceに関連付けるために必要なすべてのサービスコードを作成しました。
次に、乱数を返すサービスに新しいメソッドを追加します。
getDistance()メソッドの追加
getDistance()というコードがOdometerServiceクラスに追加され、アクティビティによって呼び出されます。 乱数を返しますが、後でAndroidポジショニングサービスを使用するように更新します。
以下はOdometerService.javaの完全なコードです。 あなたのバージョンに入れて
太字の変更:

次に、OdometerServiceを使用するようにMainActivityクラスを更新します。
MainActivityレイアウトの更新
アプリケーションを構築する次の手順は、MainActivityをOdometerServiceに関連付けて、そのgetDistance()メソッドを呼び出すことです。 レイアウトにラベルを追加することから始めましょう。
MainActivity。 OdometerServiceクラスのgetDistance()メソッドによって返された数値を表示します。
activity_main.xmlマークアップのバージョンを変更し、太字で変更します。

»本の詳細については、出版社のウェブサイトをご覧ください
» 感嘆
» 抜粋
ホーカーのクーポンが20%オフ-Head First