android中DeskClock的一些bug解决方案


  本文中涉及的DeskClock为android中源生时钟。

  问题一:

【操作步骤】clock->右下角图标->settings->snooze length->滑动选择任意时间(不是默认值)->横屏
【实际结果】横屏后时间数值恢复为之前设置的值
【预期结果】时间数值应为所选值

   该问题为横屏刷新界面所致

  首先我们在manifest文件中添加下面这个属性

android:configChanges="orientation|screenSize"

 <activity android:name="SettingsActivity"
                android:label="@string/settings"
                android:theme="@style/SettingsTheme"
                android:taskAffinity=""
                android:excludeFromRecents="true"
                android:configChanges="orientation|screenSize"
		>
 然后我们需要在 SettingsActivity.java中添加相应的代码

 public void onConfigurationChanged(Configuration newConfig) {
	super.onConfigurationChanged(newConfig);
    }

  问题二:

 

  问题:  随意输入倒计时时间然后点击后面“×”全部删除,其他三个页面相关按钮(添加闹钟、添加时区、计时按钮)消失,点击对应位置功能还能生效

首先这个问题是因为动画引起的。

我们应该修改src/com/android/deskclock/TimerSetupView.java下的这个文件。

private void setFabButtonVisibility(boolean show) {
        final int finalVisibility = show ? View.VISIBLE : View.INVISIBLE;
        if (mStart == null || mStart.getVisibility() == finalVisibility) {
            // Fab is not initialized yet or already shown/hidden
            return;
        }
	///注意修改是把下面的值进行修改@{
        final Animator scaleAnimator = AnimatorUtils.getScaleAnimator(
                mStart, show ? 1.0f : 1.0f, show ? 1.0f : 1.0f);
        ///@}
        scaleAnimator.setDuration(AnimatorUtils.ANIM_DURATION_SHORT);
        scaleAnimator.addListener(show ? mShowFabAnimatorListener : mHideFabAnimatorListener);
        scaleAnimator.start();
    }

问题三:

【预置条件】有一个即将到来的闹钟
【操作步骤】拨打电话--- 通话中--观察
【实际结果】通话中, 闹铃无弹出提示
【预期结果】通话中,来闹铃弹出提示框

这个问题我们应该在闹钟的服务框里面添加一个东东

src/com/android/deskclock/alarms/AlarmService.java

     /// M: If boot from power off alarm, don't show the notification and alarmActivity @{
        if (!PowerOffAlarm.bootFromPoweroffAlarm()) {
            /* M:If user is in call, just show alarm notification without AlarmActivity,
             * otherwise show Alarm Notification with AlarmActivity
             */
            if (inCall) {
                mInstanceAlarm = mCurrentAlarm;
                AlarmNotifications.updateAlarmNotification(this, mCurrentAlarm);
                //增加下面一句代码
                AlarmNotifications.showAlarmNotification(this, mCurrentAlarm);
            } else {
                AlarmNotifications.showAlarmNotification(this, mCurrentAlarm);
            }
        } /// @}


问题四:

【操作步骤】新建一个在当前时间几分钟后响铃的单次闹钟,下拉状态栏点击DISMISS NOW后,返回idle界面观察
【实际结果】状态栏靠右边还有一个闹钟图标

  这个问题比较尴尬,当时想了好久也没弄出来 后来还是我师傅叫我解的。

src/com/android/deskclock/alarms/AlarmStateManager.java 修该这个下面的文件

 if (alarm != null && !alarm.daysOfWeek.isRepeating()) {
            // Check parent if it needs to reschedule, disable or delete itself
            if (instance.mAlarmId != null) {
               /// 做出如下修改,去更新闹钟状态{@
		AlarmInstance.deleteInstance(context.getContentResolver(), instance.mId);
		updateNextAlarm(context);
		///@}
                updateParentAlarm(context, instance);
            }
        }
    }

问题五:

【操作步骤】时钟->设置>设置“一周从那天开始”>返回闹钟界面->观察设置是否生效
【实际结果】需要退出时钟再次进入,该设置才会生效
【预期结果】不用退出重进,当即生效

   这个问题主要是因为设置后没有生效

src/com/android/deskclock/DeskClock.java修改这个文件下的文件

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // Recreate the activity if any settings have been changed 如果设置有任何的修改,就重新设置这个页面
       /// M:code is commented as recreate disturbing  activity resume cycle 
        if (requestCode == REQUEST_CHANGE_SETTINGS && resultCode == RESULT_OK) {
            recreate();
        }
    }

问题六:

【操作步骤】倒计时提醒界面-》来闹钟提醒-》下拉状态栏-》观察通知栏
【实际结果】通知栏显示Clock is running点击进入的是App info界面
【预期结果】通知栏不显示Clock is running

  src/com/android/deskclock/alarms/AlarmService.java
我们需要在这个文件下进行修改:

 /**
         * M: Set alarmService foreground for the case that alarm's ringtone
         * stop because low memory to kill deskclock process @{
         */
        Notification notification = new Notification();
        notification.flags |= Notification.FLAG_HIDE_NOTIFICATION;
        //注释掉下面的代码就可以了
        //this.startForeground(NOTIFICATION_KEY_FOREGROUND, notification);
        LogUtils.v("Start set the alarmService foreground");
        /** @} */
        AlarmKlaxon.start(this, mCurrentAlarm,inCall);
        sendBroadcast(new Intent(ALARM_ALERT_ACTION));
    }


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值