android中DeskClock的一些bug解決方案
阿新 • • 發佈:2019-02-12
本文中涉及的DeskClock為android中源生時鐘。
問題一:
【操作步驟】clock->右下角圖示->settings->snooze length->滑動選擇任意時間(不是預設值)->橫屏
【實際結果】橫屏後時間數值恢復為之前設定的值
【預期結果】時間數值應為所選值
該問題為橫屏重新整理介面所致
首先我們在manifest檔案中新增下面這個屬性
android:configChanges="orientation|screenSize"
然後我們需要在SettingsActivity.java中新增相應的程式碼<activity android:name="SettingsActivity" android:label="@string/settings" android:theme="@style/SettingsTheme" android:taskAffinity="" android:excludeFromRecents="true" android:configChanges="orientation|screenSize" >
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));
}