libro
www.tuyano.com
Google androidプログラミング入門

サービスを作成する (5/5)

作成:2010-11-01 22:39
更新:2010-11-01 22:46

■ServiceConnection とBroadcastReceiver

では、サービス利用で必要となる「ServiceConnection」と「ServiceConnection」のクラスについて見てみましょう。これらは、先程のソースコードに「MyServiceConnection」「MyServiceReceiver」として用意してありました。

○ServiceConnectionクラスについて
これは、ServiceConnectionインターフェイスを継承して作成します。ここには以下の2つのメソッドを用意する必要があります。

public void onServiceConnected(ComponentName className, IBinder service)
サービスと接続した時の処理を記述します。引数には、ComponentNameIBinderが渡されます。IBinderは、Binderのインターフェイスで、このIBinderを経由してサービスを取得することができます。

ここでは、IBinderMySampleService.MySampleBinderにキャストし、「getService」メソッドを呼び出して、MySampleServiceインスタンスを取得していますね。先にMySampleBinderの中でgetServiceを定義したのを思い出してください。このようにBinderを使うことで、アプリから接続されたサービスを取り出せるのです。

○BroadcastReceiverクラスについて
これは、サービスがブロードキャストされたとき、それを受診するためのものです。先に、サービスとアプリを関連付ける際に、このレシーバーが用いられました。サービスでブロードキャストすると、登録されたレシーバーに用意されているメソッドが呼び出されるようになっているのです。用意されるメソッドは以下のようなものです。

public void onReceive(Context context, Intent intent)
引数には、ContextIntentが渡されます。Intentは、先にサービスからsendBroadcastでブロードキャストをした際に送られたIntentです。このIntentでは、putExtraを使って値を組み込んでありましたね。それをこのonReceiveでは取り出しています。
int counter = intent.getIntExtra("counter", 0);
この「getIntExtra」は、int値を取り出すためのメソッドです。同様に、各種の値を取り出すためのメソッドがIntentには一通り備わっています。それらを利用することで、インテント経由で値をやり取りできるのですね。

では、全体が完成したらアプリを実行してみましょう。画面には、1秒ごとに数字がカウントされていきます。これは、サービスで毎秒数字を加算し、それをアプリで受け取って表示しているのです。ごくシンプルなものですが、サービスとアプリの連携がどういうものかわかるのではないでしょうか。

※プログラムリストが表示されない場合

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);
	}
	
}

※関連コンテンツ

「Google androidプログラミング入門」に戻る