Activity で レシーバーを登録して、インテントでサービスを開始する。
サービスでは、システムの時間を取得して、レシーバーに送る。
レシーバーでは受っとった時間を画面に表示する。
package com.example.servicetest; import android.app.Activity; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.util.Log; public class MainActivity extends Activity { IntentFilter intentFilter; MyService4Receiver receiver; Intent intent = null; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // レシーバーの登録 receiver = new MyService4Receiver(); receiver.activity = this; intentFilter = new IntentFilter(); intentFilter.addAction(MyService4Service.actionName); registerReceiver(receiver, intentFilter); } public void onResume() { super.onResume(); Log.i("タグ", "onResume()"); intent = new Intent(getBaseContext(), MyService4Service.class); startService(intent); } public void onDestroy() { super.onDestroy(); Log.i("タグ", "onDestroy()"); unregisterReceiver(receiver);//レシーバー登録解除 if (intent != null) { stopService(intent);//サービスの停止 } intent = null; } }
package com.example.servicetest; import java.util.Calendar; import java.util.GregorianCalendar; import java.util.TimeZone; import android.app.Service; import android.content.Context; import android.content.Intent; import android.os.Handler; import android.os.IBinder; import android.os.Message; import android.util.Log; public class MyService4Service extends Service { public static final String actionName = "MYSERVICE4_ACTION"; MyHandler mHandler = null; private static Context contex; @Override public int onStartCommand(Intent intent, int flags, int startId) { Log.i("MyService4Service", "onStartCommand"); if (mHandler == null) { mHandler = new MyHandler(); mHandler.sendEmptyMessage(1); } contex = getBaseContext(); return START_NOT_STICKY;//サービスの強制終了後、再起動しない } public void onDestroy() { if (mHandler != null) { mHandler.removeMessages(1); mHandler = null; } super.onDestroy(); } @Override public IBinder onBind(Intent arg0) { // TODO 自動生成されたメソッド・スタブ return null; } static class MyHandler extends Handler { public void handleMessage(Message msg) { GregorianCalendar gc = (GregorianCalendar) GregorianCalendar.getInstance(TimeZone.getTimeZone("Asia/Tokyo")); String stringTime = gc.get(Calendar.HOUR_OF_DAY) + ":" + gc.get(Calendar.MINUTE) + ":" + gc.get(Calendar.SECOND); Intent broadcastIntent = new Intent(); broadcastIntent.putExtra("message", stringTime); broadcastIntent.setAction(actionName); contex.sendBroadcast(broadcastIntent); sendEmptyMessageDelayed(1, 1000); } } }
package com.example.servicetest; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.widget.TextView; public class MyService4Receiver extends BroadcastReceiver { MainActivity activity;// onCreate の receiver.activity = this; @Override public void onReceive(Context context, Intent intent) { // メッセージを取ってくる Log.i("MyService4Receiver", "onReceive"); Bundle bundle = intent.getExtras(); String message = bundle.getString("message"); // そいつを表示する if (activity != null) { TextView tv = (TextView) activity.findViewById(R.id.textView1); tv.setText(message); } } }
サービスはマニフェストにも登録しておく、
レシーバはregisterReceiver();で動的に登録してあるので、マニフェストには登録しなくても動く。
0 件のコメント:
コメントを投稿