Service、Alarm、BroadcastReceiverの使い方

6699 ワード

1:サービスクラスを定義し、サービスクラスでAlarmManagerを使用してサービスの実行を管理する
public class WtacService extends Service{

    private AlarmManager alarmManager = null;

    private PendingIntent alarmIntent = null;

    

    @Override

    public IBinder onBind(Intent arg0) {

        return null;

    }

    

    @Override

    public void onCreate() {

        super.onCreate();

        alarmManager = (AlarmManager)this.getSystemService(Context.ALARM_SERVICE);

        String ALARM_ACTION = WR.ACTION_WTAC_ALAEM;

        Intent intentTo = new Intent(ALARM_ACTION);

        alarmIntent = PendingIntent.getBroadcast(this, 0, intentTo, 0);

    }



    @Override

    public int onStartCommand(Intent intent, int flags, int startId) {

        final Context context = this.getApplicationContext();

        

        int alarmType = AlarmManager.ELAPSED_REALTIME_WAKEUP;

        long timeRepeat = SystemClock.elapsedRealtime()+(10*1000);

        long intervalMillis = 10*1000;

        alarmManager.setInexactRepeating(alarmType, timeRepeat, intervalMillis, alarmIntent);

        

        Thread mThread = new Thread(new Runnable(){

            @Override

            public void run() {

                try{

                    DBManager dbManager = new DBManager(context);

                    List<Wtac> list = dbManager.selectWtacs();

                    Gson gson = new Gson();

                    String json = gson.toJson(list, new TypeToken<List<Wtac>>(){}.getType());

                    System.out.println("  :"+json);

                }finally{

                    //           

                    stopSelf();

                }

            }

        });

        mThread.start();

        

        return Service.START_NOT_STICKY;

    }

}

2:AndroidManifest.xmlファイルにこのサービスを登録する
<service

            android:name="com.wzh.service.WtacService"

            android:enabled="true"

            android:exported="false" />

3:ブロードキャスト受信機の定義
public class WtacAlarmReceiver extends BroadcastReceiver{

    @Override

    public void onReceive(Context context, Intent intent) {

        Intent startIntent = new Intent(context, WtacService.class);

        context.startService(startIntent);

    }

}

4:AndroidManifest.xmlファイルにこのブロードキャスト受信機を登録する
<receiver android:name="com.wzh.receiver.WtacAlarmReceiver"

            android:enabled="true"

            android:exported="false">

            <intent-filter>

                <action android:name="com.wzh.receiver.ACTION_WTAC_ALAEM"/>

            </intent-filter>

        </receiver>