private ServiceConnection serviceConnection;サービスとの接続を管理するServiceConnection と、レシーバーであるMyServiceReceiverを保管します。なお、MyServiceReceiverは内部クラスで使用する関係上、finalにしてあります。このため、最初にnewでインスタンスを用意しておきます。
private final MyServiceReceiver receiver = new MyServiceReceiver();
serviceConnection = new MyServiceConnection();まず、MyServiceConnectionインスタンスを用意します(このクラスについては後述)。
Intent intent = new Intent(this, MySampleService.class);Intentインスタンスを作成します。これは引数にアプリ自身(this)と、起動するサービス(MySampleService)のclassを指定します。
ComponentName component = startService(intent);サービスの起動は、「startService」で行ないます。引数に、先ほど用意したMySampleService起動用のIntentを渡して呼び出します。返値にはComponentNameクラスのインスタンスが返されます(今回は特に使っていません)。
IntentFilter filter = new IntentFilter(MySampleService.ACTION);ブロードキャストされたときに特定のアクションによるIntentだけを受診するようにするフィルターを作成します。これはIntentFilterクラスとして用意されています。ここでは、MySampleServiceに用意してあるACTIONクラスフィールドの値がアクションとして送られた場合のみ受け取るようにフィルタリングします。
registerReceiver(receiver, filter);レシーバーにフィルターを登録します。ここでは、あらかじめreceiverフィールドとしてレシーバーを用意してありますので、これとIntentFilterを引数にして、「registerReceiver」を呼び出します。
bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE);用意したIntent、ServiceConnectionを引数に指定して「bindService」を呼び出し、サービスにバインドをします。第3引数には、BIND_AUTO_CREATEを指定してバインドを自動生成するようにしておきます。これは、ゼロかBIND_AUTO_CREATEのいずれかを指定すると考えてください。
unbindService(serviceConnection);まず、unbindServiceでサービスとの接続を切り、それからunregisterReceiverでレシーバーの登録を解除します。これでサービスとアプリとの関連が消えます。
unregisterReceiver(receiver);
※リストが表示されない場合
AddBlockなどの広告ブロックツールがONになっているとリストなどが表示されない場合があります。これらのツールをOFFにしてみてください。
package jp.tuyano.sample; import java.util.Calendar; import android.app.Activity; import android.content.*; import android.os.*; import android.widget.TextView; public class MySample extends Activity { private ServiceConnection serviceConnection; private final MyServiceReceiver receiver = new MyServiceReceiver(); public TextView textview01; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); textview01 = (TextView)findViewById(R.id.TextView01); startMyService(); } public void startMyService(){ // ServiceConnectionの用意 serviceConnection = new MyServiceConnection(); // サービスを開始 Intent intent = new Intent(this, MySampleService.class); ComponentName component = startService(intent); IntentFilter filter = new IntentFilter(MySampleService.ACTION); registerReceiver(receiver, filter); // サービスにバインド bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE); } @Override protected void onDestroy() { // サービス終了 unbindService(serviceConnection); // バインド解除 unregisterReceiver(receiver); // レシーバー解除 super.onDestroy(); } } // 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); } }
<< 前へ | 次へ >> |