Alarm: recover alarm after reboot in AlarmBootReceiver

This commit is contained in:
Snek 2017-03-23 23:12:59 +03:00
parent 496e530761
commit 9d5d317d07
3 changed files with 52 additions and 6 deletions

View File

@ -5,6 +5,7 @@
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<application
android:allowBackup="true"
@ -54,9 +55,14 @@
<service
android:name=".AlarmService"
android:enabled="true" />
<receiver android:name=".AlarmReceiver">
<receiver android:name=".AlarmReceiver" />
<receiver
android:name=".AlarmBootReceiver"
android:enabled="true"
android:exported="true"
android:label="AlarmBootReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
</application>

View File

@ -55,10 +55,10 @@ public class AlarmActivity extends AppCompatActivity {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
Log.d(TAG, "Current API functions have been executed");
setTime(calendar);
setTime(calendar, editor);
} else {
Log.d(TAG, "Legacy API functions have been executed");
setTimeLegacy(calendar);
setTimeLegacy(calendar, editor);
}
Log.d(TAG, "Alarm On");
@ -72,7 +72,7 @@ public class AlarmActivity extends AppCompatActivity {
}
@SuppressWarnings("deprecation")
private void setTimeLegacy(Calendar calendar) {
private void setTimeLegacy(Calendar calendar, SharedPreferences.Editor editor) {
calendar.set(Calendar.HOUR_OF_DAY, alarmTimePicker.getCurrentHour());
calendar.set(Calendar.MINUTE, alarmTimePicker.getCurrentMinute());
@ -81,11 +81,12 @@ public class AlarmActivity extends AppCompatActivity {
}
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
editor.putLong("alarm_time", calendar.getTimeInMillis());
Toast.makeText(this, "Alarm has been set for " + alarmTimePicker.getCurrentHour() + " hour(s) " + alarmTimePicker.getCurrentMinute() + " minute(s)", Toast.LENGTH_SHORT).show();
}
@TargetApi(Build.VERSION_CODES.M)
private void setTime(Calendar calendar) {
private void setTime(Calendar calendar, SharedPreferences.Editor editor) {
calendar.set(Calendar.HOUR_OF_DAY, alarmTimePicker.getHour());
calendar.set(Calendar.MINUTE, alarmTimePicker.getMinute());
@ -94,6 +95,7 @@ public class AlarmActivity extends AppCompatActivity {
}
alarmManager.setAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
editor.putLong("alarm_time", calendar.getTimeInMillis());
Toast.makeText(this, "Alarm has been set for " + alarmTimePicker.getHour() + " hour(s) " + alarmTimePicker.getMinute() + " minute(s)", Toast.LENGTH_SHORT).show();
}
}

View File

@ -0,0 +1,38 @@
package com.example.yink.amadeus;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Build;
import android.preference.PreferenceManager;
import android.support.v4.content.WakefulBroadcastReceiver;
import android.util.Log;
public class AlarmBootReceiver extends WakefulBroadcastReceiver {
final String TAG = "A.AlarmBootReceiver";
@Override
public void onReceive(Context context, Intent intent) {
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context);
if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())
&& settings.getBoolean("alarm_toggle", false)) {
AlarmManager alarmManager = (AlarmManager) context.getSystemService(
Context.ALARM_SERVICE);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context,
Alarm.ALARM_ID, new Intent(context, AlarmReceiver.class), 0);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
alarmManager.setAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, settings.getLong("alarm_time", 0), pendingIntent);
} else {
alarmManager.set(AlarmManager.RTC_WAKEUP, settings.getLong("alarm_time", 0), pendingIntent);
}
Log.d(TAG, "Alarm has been recovered");
}
}
}