サービスを作成する (5/5)
作成:2010-11-01 22:39
更新:2010-11-01 22:46
更新:2010-11-01 22:46
■ServiceConnection とBroadcastReceiver
では、サービス利用で必要となる「ServiceConnection」と「ServiceConnection」のクラスについて見てみましょう。これらは、先程のソースコードに「MyServiceConnection」「MyServiceReceiver」として用意してありました。
○ServiceConnectionクラスについて
これは、ServiceConnectionインターフェイスを継承して作成します。ここには以下の2つのメソッドを用意する必要があります。
ここでは、IBinderをMySampleService.MySampleBinderにキャストし、「getService」メソッドを呼び出して、MySampleServiceインスタンスを取得していますね。先にMySampleBinderの中でgetServiceを定義したのを思い出してください。このようにBinderを使うことで、アプリから接続されたサービスを取り出せるのです。
○BroadcastReceiverクラスについて
これは、サービスがブロードキャストされたとき、それを受診するためのものです。先に、サービスとアプリを関連付ける際に、このレシーバーが用いられました。サービスでブロードキャストすると、登録されたレシーバーに用意されているメソッドが呼び出されるようになっているのです。用意されるメソッドは以下のようなものです。
では、全体が完成したらアプリを実行してみましょう。画面には、1秒ごとに数字がカウントされていきます。これは、サービスで毎秒数字を加算し、それをアプリで受け取って表示しているのです。ごくシンプルなものですが、サービスとアプリの連携がどういうものかわかるのではないでしょうか。
○ServiceConnectionクラスについて
これは、ServiceConnectionインターフェイスを継承して作成します。ここには以下の2つのメソッドを用意する必要があります。
public void onServiceConnected(ComponentName className, IBinder service)サービスと接続した時の処理を記述します。引数には、ComponentNameとIBinderが渡されます。IBinderは、Binderのインターフェイスで、このIBinderを経由してサービスを取得することができます。
ここでは、IBinderをMySampleService.MySampleBinderにキャストし、「getService」メソッドを呼び出して、MySampleServiceインスタンスを取得していますね。先にMySampleBinderの中でgetServiceを定義したのを思い出してください。このようにBinderを使うことで、アプリから接続されたサービスを取り出せるのです。
○BroadcastReceiverクラスについて
これは、サービスがブロードキャストされたとき、それを受診するためのものです。先に、サービスとアプリを関連付ける際に、このレシーバーが用いられました。サービスでブロードキャストすると、登録されたレシーバーに用意されているメソッドが呼び出されるようになっているのです。用意されるメソッドは以下のようなものです。
public void onReceive(Context context, Intent intent)引数には、ContextとIntentが渡されます。Intentは、先にサービスからsendBroadcastでブロードキャストをした際に送られたIntentです。このIntentでは、putExtraを使って値を組み込んでありましたね。それをこのonReceiveでは取り出しています。
int counter = intent.getIntExtra("counter", 0);この「getIntExtra」は、int値を取り出すためのメソッドです。同様に、各種の値を取り出すためのメソッドがIntentには一通り備わっています。それらを利用することで、インテント経由で値をやり取りできるのですね。
では、全体が完成したらアプリを実行してみましょう。画面には、1秒ごとに数字がカウントされていきます。これは、サービスで毎秒数字を加算し、それをアプリで受け取って表示しているのです。ごくシンプルなものですが、サービスとアプリの連携がどういうものかわかるのではないでしょうか。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
// ServiceConnectionクラス class MyServiceConnection implements ServiceConnection { private MySampleService myservice; @Override public void onServiceConnected(ComponentName className, IBinder service) { myservice = ((MySampleService.MySampleBinder)service).getService(); } @Override public void onServiceDisconnected(ComponentName className) { myservice = null; } } // Receiverクラス class MyServiceReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { int counter = intent.getIntExtra("counter", 0); ((MySample)context).textview01.setText("count: " + counter); } }
※関連コンテンツ