[ST_闹钟]添加多个同一时间响铃的闹钟(3个以上),响铃后关闭闹钟,界面会卡在响铃界面

1、问题描述:如题;

2、问题分析:在/DeskClock/src/com/android/deskclock/alarms/AlarmService.java文件的public int onStartCommand(Intent intent, int flags, int startId)方法中对这种重复设计相同时间的闹钟没有做出处理。我们只需要在闹钟响起的的时候判断当前闹钟是不是已经是正在响的闹钟,如果不是说明是设置了多个同时间的闹钟,这时候的处理是不重新响铃。将这种重复的闹钟过滤掉。

3、解决方案:

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.v("AlarmService.onStartCommand() with intent: " + intent.toString());


        long instanceId = AlarmInstance.getId(intent.getData());
        if (START_ALARM_ACTION.equals(intent.getAction())) {
            ContentResolver cr = this.getContentResolver();
            AlarmInstance instance = AlarmInstance.getInstance(cr, instanceId);
            if (instance == null) {
                Log.e("No instance found to start alarm: " + instanceId);
                if (mCurrentAlarm != null) {
                    // Only release lock if we are not firing alarm
                    AlarmAlertWakeLock.releaseCpuLock();
                }
                return Service.START_NOT_STICKY;
            } else if (mCurrentAlarm != null && mCurrentAlarm.mId == instanceId) {
                Log.e("Alarm already started for instance: " + instanceId);
                return Service.START_NOT_STICKY;
            }
            //added 
            else if (mCurrentAlarm != null && mCurrentAlarm.mId != instanceId) {
                Log.e("Alarm was started for instance: " + instanceId);
                AlarmStateManager.setDismissState(this, instance);
                return Service.START_NOT_STICKY;
            }
            //added end

            
if (!phoneIsInUse()) {
startAlarm(instance);
} else {
AlarmStateManager.setSnoozeState_incall(this, instance);
}
        } else if(STOP_ALARM_ACTION.equals(intent.getAction())) {
            if (mCurrentAlarm != null && mCurrentAlarm.mId != instanceId) {
                Log.e("Can't stop alarm for instance: " + instanceId +
                    " because current alarm is: " + mCurrentAlarm.mId);
                return Service.START_NOT_STICKY;
            }
            stopSelf();
        }


        return Service.START_NOT_STICKY;
    }


希望我的博客能对你有用,写博客的用意是自己做一个记录和自己的知识能在某个时候帮到大家。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值