我需要使用警报管理器以实用方式重新启动设备,我正在调用意图,而在意图活动中我正在使用重启功能,而我的设备已根植于其中。我的代码如下
public void onClick(View v) {
Calendar calNow = Calendar.getInstance();
Calendar calSet = (Calendar) calNow.clone();
calSet.set(Calendar.HOUR_OF_DAY, timePicker.getCurrentHour());
calSet.set(Calendar.MINUTE, timePicker.getCurrentMinute());
calSet.set(Calendar.SECOND, 0);
setAlarm(calSet, optRepeat.isChecked());
}});
private void setAlarm(Calendar targetCal, boolean repeat){
Intent intent = new Intent(getBaseContext(), AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), RQS_1, intent, 0);
AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis() , pendingIntent);
if(repeat){
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,targetCal.getTimeInMillis(),
TimeUnit.MINUTES.toMillis(2),pendingIntent);
}else{
alarmManager.set(AlarmManager.RTC_WAKEUP,targetCal.getTimeInMillis(),pendingIntent);
}
}
在AlarmReceiver.java中,我将代码构建为
public class AlarmReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent arg1) {
Toast.makeText(context, "Alarm received!", Toast.LENGTH_LONG).show();
rebootDevice();
}
在Manifest文件中,我的代码就像
<activity android:name=".activity.RebootTimer" android:label="@string/app_name" android:theme="@android:style/Theme.Dialog" ></activity>
<receiver android:name=".service.AlarmReceiver" />
首次我的设备正在重新启动,因为我的设备没有重新启动。当我通过隐藏重启功能保持Toast消息时,每个间隔都会显示Toast消息。
答案 0 :(得分:1)
请注意,您必须检测设备的重新启动,并且必须再次在onRecieve功能中触发警报,如下所示:
修改强>
你应该自己尝试一下。无论如何,你可以在这里做:
public void onReceive(Context context, Intent arg1) {
boolean flag = Intent.ACTION_BOOT_COMPLETED.equals(arg1.getAction());
if(flag==true){
//call your set alarm function once again which you do in activity.
setAlarm(<Your Calendar time>, <your repeat boolean value>, context);
}else{
rebootDevice();
}
}
//make this function in your broadcast receiver class
private void setAlarm(Calendar targetCal, boolean repeat, Context ctx){
Intent intent = new Intent(ctx, AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(ctx, RQS_1, intent, 0);
AlarmManager alarmManager = (AlarmManager)ctx.getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis() , pendingIntent);
if(repeat){
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,targetCal.getTimeInMillis(),
TimeUnit.MINUTES.toMillis(2),pendingIntent);
}else{
alarmManager.set(AlarmManager.RTC_WAKEUP,targetCal.getTimeInMillis(),pendingIntent);
}
希望这会有所帮助。
答案 1 :(得分:0)
我只是想补充一下,正如@TheLittleNaruto和@Andrew T.指出的那样,问题在于,如文档中所示,当重启设备时,AlarmManager将清除所有警报:
设备处于睡眠状态时保留已注册的警报(并且可以 如果它们在那段时间内关闭,可以选择将设备唤醒),但是 如果关闭并重新启动,将被清除。
http://developer.android.com/reference/android/app/AlarmManager.html
正如已经指出的那样,解决方案是在设备重新启动时注册启动接收器以重新配置警报。