Android 闹钟 开发过程记录(五)

我的闹钟响铃的逻辑是这样设计的:

1.设置好闹钟后,立即发送一个带有唯一id的延迟意图PendingIntent广播;

2.当时间到的时候,广播接受者接收到发送过来的数据,并开启一个服务,将数据传递进去;

3.服务创建成功后,根据传递过来的数据进行响铃和振动操作,同时启动一个响铃的activity界面,将时间,标签等信息传递过去显示;

4.响铃的activity创建成功后,立即与服务进行绑定,界面上有两个按钮,暂停再响 和 关闭闹钟,分别对应服务里面的相应的方法。

5.当点击 暂停5分钟再响,会在服务里发送一个5分钟的延迟广播,同时 解绑服务-->停止服务;

   当点击关闭闹钟的时候,如果该闹钟的重复周期为只响一次,则取消该闹钟的广播,更新数据库,同时 解绑服务-->停止服务;如果该闹钟的重读周期为其它,则计算与下一次闹铃最短的时间间隔,发送一个延迟广播,同时 解绑服务-->停止服务。


整体的思路概括一下:有几个闹钟,系统里就有几个广播;当一个闹钟的广播处理完成之后,根据重复周期判断是否发送下一次广播。


广播接受者的代码如下:

public class AlarmClockReceiver extends BroadcastReceiver {
	private static final String TAG = "AlarmClockReceiver";
	public static final String Alarm_CLOCK_RING_ONLY_ONCE = "只响一次";

	@Override
	public void onReceive(Context context, Intent intent) {

		String action = intent.getAction();
		if(action.equals("cn.edu.usts.cardhelper.alarmclock")){
			Log.i(TAG, "--------------------闹钟的广播接受者-----------------------");
			Bundle bundle = intent.getExtras();
			int alarmClockId = bundle.getInt("alarmClockId");
			int hour = bundle.getInt("hour");
			int minute = bundle.getInt("minute");
			String repeatCycle = bundle.getString("repeatCycle");
			String ringInfo = bundle.getString("ringInfo");
			int isShake = bundle.getInt("isShake");
			String tag = bundle.getString("tag");
			Log.i(TAG, "---接收到的闹钟id为:"+alarmClockId+"---重复周期为:"+repeatCycle+"---铃声信息:"+ringInfo+"---振动:"+isShake+"---hour:"+hour+"---minute:"+minute+"---tag:"+tag);
			
			//开启一个服务
			Intent ringIntent = new Intent(context, AlarmClockService.class);
			ringIntent.putExtras(bundle);
			ringIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
			context.startService(ringIntent);
			
		}
		
	}
}


服务的代码如下:

public class AlarmClockService extends Service {

	public static final String TAG = "AlarmClockService";
	public static final String Alarm_CLOCK_RING_ONLY_ONCE = "只响一次";
	private AlarmManager alarmManager;
	private MediaPlayer mediaPlayer;
	private Vibrator vibrator;
	private Bundle bundle;
	private Intent toReceiverIntent;
	@Override
	public IBinder onBind(Intent intent) {
		Log.i(TAG, "--------------onBind----------");
		return new AlarmClockRingServiceProvider();
	}

	@Override
	public void onCreate() {
		Log.i(TAG, "--------------onCreate----------");
		super.onCreate();
		alarmManager = (AlarmManager) this.getSystemServ
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值