MainActivity如下:
package cc.cc;
import java.util.Calendar;
import java.util.Locale;
import android.os.Bundle;
import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
/**
* Demo描述:
* 重复闹钟的实现
*
* 注意事项:
* 1 因为我们是要实现的两个闹钟每天早八点和晚八点,它们是重复的.
* 所以在PendingIntent.getBroadcast()很容易出错.导致早八点
* 的闹钟无效.主要原因是因为该方法的第四个参数引起的.
* 解决办法:为BroadcastReceiver设置两个action,在生成Intent
* 的时候采用了不同的action,从而让两个闹钟都起作用.
* 如果有更好的方式请留言指出,多谢.
* 2 在calendar.set(Calendar.HOUR_OF_DAY, 8)方法的第二个参数
* 表示小时,请按照24小时制式填写.不用管此时设备采用什么时间
* 制式(12小时或24小时)
*
* 参考资料:
* 1 http://blog.csdn.net/hudashi/article/details/7060837
* 2 http://blog.csdn.net/wdaming1986/article/details/6745655
* 3 http://blog.csdn.net/z1074971432/article/details/17532139
* Thank you very much
*
*/
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
sendAlarmEveryday1(this);
sendAlarmEveryday2(this);
}
private void sendAlarmEveryday1(Context context){
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Calendar calendar =Calendar.getInstance(Locale.getDefault());
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 8);
calendar.set(Calendar.MINUTE, 30);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
Intent intent = new Intent();
intent.setAction("testalarm0");
PendingIntent pendingIntent=PendingIntent.getBroadcast(context,0, intent,PendingIntent.FLAG_CANCEL_CURRENT);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),AlarmManager.INTERVAL_DAY,pendingIntent);
}
private void sendAlarmEveryday2(Context context){
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Calendar calendar =Calendar.getInstance(Locale.getDefault());
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 20);
calendar.set(Calendar.MINUTE, 30);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
Intent intent = new Intent();
intent.setAction("testalarm1");
PendingIntent pendingIntent=PendingIntent.getBroadcast(context,0, intent,PendingIntent.FLAG_CANCEL_CURRENT);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),AlarmManager.INTERVAL_DAY,pendingIntent);
}
}
AlarmBroadcastReceiver如下:
package cc.cc;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class AlarmBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if ("testalarm0".equals(intent.getAction())) {
System.out.println("第一个闹钟");
}
if ("testalarm1".equals(intent.getAction())) {
System.out.println("第二个闹钟");
}
}
}
AndroidManifest.xml如下:
main.xml如下:
|