1. 程式人生 > >android中DeskClock的一些bug解決方案

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);
    }

  問題二:

 

  問題:  隨意輸入倒計時時間然後點選後面“×”全部刪除,其他三個頁面相關按鈕(新增鬧鐘、新增時區、計時按鈕)消失,點選對應位置功能還能生效

首先這個問題是因為動畫引起的。

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();
    }

問題三:

【預置條件】有一個即將到來的鬧鐘
【操作步驟】撥打電話--- 通話中--觀察
【實際結果】通話中, 鬧鈴無彈出提示
【預期結果】通話中,來鬧鈴彈出提示框

這個問題我們應該在鬧鐘的服務框裡面新增一個東東

     /// 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介面觀察
【實際結果】狀態列靠右邊還有一個鬧鐘圖示

  這個問題比較尷尬,當時想了好久也沒弄出來 後來還是我師傅叫我解的。

 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);
            }
        }
    }

問題五:

【操作步驟】時鐘->設定>設定“一週從那天開始”>返回鬧鐘介面->觀察設定是否生效
【實際結果】需要退出時鐘再次進入,該設定才會生效
【預期結果】不用退出重進,當即生效

   這個問題主要是因為設定後沒有生效

@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

我們需要在這個檔案下進行修改:
 /**
         * 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));
    }