キューの概念はIntentService – 非同期、自動終了、キュー・・・便利なサービスの実装 – Android 開発入門がわかりやすいと思います。
ただしこのタイマーは、タスク一覧でスワイプすると止まります。このままではタイマーとしては不完全ですね。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
public class MainActivity extends AppCompatActivity { public static final String TAG = MainActivity.class.getSimpleName(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Time time = new Time(5); Intent intent = new Intent(getApplicationContext(), AlarmService.class); intent.putExtra(Time.TAG, time); startService(intent); } } |
Time.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
public class Time implements Serializable { public static final String TAG = Time.class.getSimpleName(); public int second = 0; public Calendar startCal, finishCal; public Time(int second) { this.second = second; this.startCal = Calendar.getInstance(); this.finishCal = Calendar.getInstance(); this.finishCal.add(Calendar.SECOND, second); } } |
AlarmService.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
public class AlarmService extends IntentService { public static final String TAG = AlarmService.class.getSimpleName(); public AlarmService() { super(TAG); } @Override protected void onHandleIntent(Intent intent) { Time t = (Time) intent.getSerializableExtra(Time.TAG); Timer timer = new Timer("timerA"); timer.schedule(new Task(t), 1000, 1000); } class Task extends TimerTask{ Time t; int sec = 0; public Task(Time t) { this.t = t; this.sec = t.second; } @Override public void run() { --sec; Log.d(TAG, "残りsec = " + sec); if (Calendar.getInstance().getTimeInMillis() >= t.finishCal.getTimeInMillis() && Calendar.getInstance().get(Calendar.SECOND) == t.finishCal.get(Calendar.SECOND)){ Intent intent = new Intent(getApplicationContext(), MyService.class); intent.putExtra(Time.TAG, t); startService(intent); } if (Calendar.getInstance().getTimeInMillis() >= t.finishCal.getTimeInMillis() + 1000) cancel(); } } } |
MyService.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
public class MyService extends IntentService { public static final String TAG = MyService.class.getSimpleName(); public MyService() { super(TAG); } @Override protected void onHandleIntent(Intent intent) { Log.d(TAG, "hogehoge. "); Context context = getApplicationContext(); PendingIntent pi = PendingIntent.getBroadcast( context, 1, new Intent(context, MyBroadcast.class), PendingIntent.FLAG_ONE_SHOT); NotificationCompat.Builder builder = new NotificationCompat.Builder(context); builder.setSmallIcon(R.mipmap.ic_launcher); builder.setLargeIcon(((BitmapDrawable)context.getResources().getDrawable(R.mipmap.ic_launcher)).getBitmap()); builder.setContentTitle("Title"); builder.setContentText("Content text."); builder.setContentInfo("Content info."); builder.setTicker("Ticker."); builder.setWhen(System.currentTimeMillis()); builder.setAutoCancel(true); builder.setDefaults(Notification.DEFAULT_ALL); builder.setContentIntent(pi); NotificationManagerCompat.from(context).notify(2000, builder.build()); } } |
Prev
Next