BroadcastReceiverとは、何かのタイミングで端末に特定の処理を通知するときによく使われる便利なライブラリです。
軽い機能であればfirebaseよりも手軽に実装することができるので、息抜きにミニアプリを作ってみたいと思ったときに試してみて
ください。
自分が書いたコードはこんな感じに仕上がりました。まずボタンを押すと、pickerがでてきます。そのpickerを使って時間を指定して、その時間になったらトーストで時間ですよ~とお知らせするシンプルなものになっております。お休みのときにささっと書いたので情報少しが古い&コードが乱雑ですがご容赦くださいまし。
MainActivity↓
</pre> <pre>public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button button = findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { TimePicker(); } }); } public void TimePicker(){ final Calendar calender = Calendar.getInstance(); int hour = calender.get(Calendar.HOUR_OF_DAY); int minute = calender.get(Calendar.MINUTE); TimePickerDialog dialog = new TimePickerDialog( this, new TimePickerDialog.OnTimeSetListener() { @Override public void onTimeSet(TimePicker view, int hourOfDay, int minute) { System.out.println(hourOfDay); calender.setTimeInMillis(System.currentTimeMillis()); calender.add(Calendar.SECOND, 5); Intent intent = new Intent(getApplicationContext(), AlarmBroadcastReceiver.class); PendingIntent pending = PendingIntent.getBroadcast( getApplicationContext(), 0, intent, 0); // アラームをセットする AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); if (am != null) { am.setExact(AlarmManager.RTC_WAKEUP, calender.getTimeInMillis(), pending); Toast.makeText(getApplicationContext(), "Set Alarm ", Toast.LENGTH_SHORT).show(); } } }, hour,minute,true) ; dialog.show(); } }</pre> <pre>
今回のお題であるBroadcastReceiverです。
</pre> <pre>public class AlarmBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // ここに端末に対してしたい処理を書きます。例ではトーストになっているので変えても構わないです。 Toast.makeText(context, "Received ", Toast.LENGTH_LONG).show(); } }</pre> <pre>
マニフェストには、パーミッションでWAKE_LOCKを設定しておきます。
その後に、applicationタグのすぐ上に”AlarmBroadcastReceiver”を定義しておきます。これがないとBroadcastReceiverが反応しない
ので忘れないでくださいね。
</pre> <pre><uses-permission android:name="android.permission.WAKE_LOCK"/></pre> <pre><application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> <receiver android:name=".AlarmBroadcastReceiver" android:process=":remote" /> </application></pre> <pre>
レイアウトのほうはボタンだけなので割愛させていただきました。コードの量も少なめで実装できるので、メンテナンスにも苦労しなさそうです。おすすめです。