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 件のコメント:
コメントを投稿