问题
I get stuck with something that , I guess , is very trivial. Basically I am scheduling alarm for a given moment in the future :
Intent contentIntent = new Intent(this, AlarmReceiver.class);
PendingIntent theappIntent = PendingIntent.getService(Main.this, 0,contentIntent, 0);
Calendar calendar = Calendar.getInstance();
calendar.set(year, month, day, hour,minute);
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), theappIntent);
works fine while mobile is constantly on. My problem is that alarm is not triggered after mobile is restarted and is TURNED ON on the expected time. Is there something I missed? Should I do some extra work to keep alarm scheduled after restart?
回答1:
You have to reset the alarm when device get boot. You are missing to detect the app when device boot and reset the alarm..so below is code written in manifest
<receiver android:name=".YourReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
Also create a BroadcastReceiver to receive the boot completed intent
public class YourReceiver extends BroadcastReceiver {
Context ct;
@Override
public void onReceive(Context context, Intent intent)
{
ct=context;
if(intent.getAction().equals("android.intent.action.BOOT_COMPLETED"))
{
// Reset your alarm here
Intent contentIntent = new Intent(ct, AlarmReceiver.class);
PendingIntent theappIntent = PendingIntent.getService(ct, 0,contentIntent, 0);
Calendar calendar = Calendar.getInstance();
calendar.set(year, month, day, hour,minute);
AlarmManager am = (AlarmManager) ct.getSystemService(ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), theappIntent);
}
}
回答2:
You should add an receiver For listening android.intent.action.BOOT_COMPLETED and start your alarm from there.
来源:https://stackoverflow.com/questions/8178890/alarm-not-working-in-android