Android原生模块DeskClock分析1(5)

2018-12-08 18:04

DeskClock分析文档

Object newValue) { String val = (String) newValue;

// Set the summary based on the new label. p.setSummary(val);

if (val != null && !val.equals(mLabel.getText())) { Log.e(\

// Call through to the generic listener. return SetAlarm.this.onPreferenceChange(p, newValue); }

return true; } });

mEnabledPref = (CheckBoxPreference) findPreference(\

//为EnabledPref设置监听

mEnabledPref.setOnPreferenceChangeListener(

new Preference.OnPreferenceChangeListener() { public boolean onPreferenceChange(Preference p, Object newValue) {Log.e(\ // Pop a toast when enabling alarms.

if (!mEnabledPref.isChecked()) {Log.e(\ popAlarmSetToast(SetAlarm.this, mHour, mMinutes, mRepeatPref.getDaysOfWeek()); }

return SetAlarm.this.onPreferenceChange(p, newValue); } });

//为mAlarmPref、mVibratePref、mRepeatPref设置监听

mTimePref = findPreference(\

mAlarmPref = (AlarmPreference) findPreference(\ mAlarmPref.setOnPreferenceChangeListener(this);

mVibratePref = (CheckBoxPreference) findPreference(\ mVibratePref.setOnPreferenceChangeListener(this);

mRepeatPref = (RepeatPreference) findPreference(\ mRepeatPref.setOnPreferenceChangeListener(this);

//定义Intent,来获取值

Intent i = getIntent();

mId = i.getIntExtra(Alarms.ALARM_ID, -1); if (Log.LOGV) {

Log.v(\ }

Alarm alarm = null;

if (mId == -1) {Log.e(\

21

DeskClock分析文档

// No alarm id means create a new alarm. alarm = new Alarm(); } else {Log.e(\

/* load alarm details from database */

alarm = Alarms.getAlarm(getContentResolver(), mId); // Bad alarm, bail to avoid a NPE. if (alarm == null) {Log.e(\ finish(); return; } }

mOriginalAlarm = alarm;

updatePrefs(mOriginalAlarm);

// We have to do this to get the save/cancel buttons to highlight on // their own.

getListView().setItemsCanFocus(true);

//为save设置监听

Button b = (Button) findViewById(R.id.alarm_save); b.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { Log.e(\ saveAlarm(); finish(); } });

//为revert设置监听

final Button revert = (Button) findViewById(R.id.alarm_revert); revert.setEnabled(false);

revert.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { Log.e(\ int newId = mId;

updatePrefs(mOriginalAlarm);

// \ if (mOriginalAlarm.id == -1) { Log.e(\

Alarms.deleteAlarm(SetAlarm.this, newId); } else {Log.e(\ saveAlarm(); }

revert.setEnabled(false);

22

DeskClock分析文档

} });

//为delete设置监听

b = (Button) findViewById(R.id.alarm_delete); if (mId == -1) {Log.e(\ b.setEnabled(false); } else {Log.e(\

b.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { Log.e(\ deleteAlarm(); } }); }

// The last thing we do is pop the time picker if this is a new alarm. if (mId == -1) {Log.e(\ // Assume the user hit cancel mTimePickerCancelled = true; showTimePicker(); } }

? updatePrefs方法用来更新获取的值

private void updatePrefs(Alarm alarm) {Log.e(\ mId = alarm.id;

mEnabledPref.setChecked(alarm.enabled); mLabel.setText(alarm.label); mLabel.setSummary(alarm.label); mHour = alarm.hour; mMinutes = alarm.minutes;

mRepeatPref.setDaysOfWeek(alarm.daysOfWeek); mVibratePref.setChecked(alarm.vibrate); // Give the alert uri to the preference. mAlarmPref.setAlert(alarm.alert); updateTime(); }

? onBackPressed方法,设置闹铃后,退出并保存 @Override

public void onBackPressed() {

if (!mTimePickerCancelled) {Log.e(\

23

DeskClock分析文档

saveAlarm(); } finish(); }

? 通过onPreferenceTreeClick方法设置时间

@Override

public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,

Preference preference) {Log.e(\ if (preference == mTimePref) {Log.e(\ showTimePicker(); }

return super.onPreferenceTreeClick(preferenceScreen, preference); }

· showTimePicker方法,定义new TimePickerDialog,设置时间 private void showTimePicker() {Log.e(\ new TimePickerDialog(this, this, mHour, mMinutes, DateFormat.is24HourFormat(this)).show(); }

· onTimeSet方法,更新时间设置

public void onTimeSet(TimePicker view, int hourOfDay, int minute) { Log.e(\

mTimePickerCancelled = false; mHour = hourOfDay; mMinutes = minute; updateTime();

// If the time has been changed, enable the alarm. mEnabledPref.setChecked(true); // Save the alarm and pop a toast.

popAlarmSetToast(this, saveAlarmAndEnableRevert());

}

? 调用在AlarmKlaxon类中定义的mVibrator @Override

public void onCreate() { mVibrator = (Vibrator)

getSystemService(Context.VIBRATOR_SERVICE);

// Listen for incoming calls to kill the alarm. mTelephonyManager = (TelephonyManager)

24

DeskClock分析文档

getSystemService(Context.TELEPHONY_SERVICE); //通话

mTelephonyManager.listen( mPhoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);

AlarmAlertWakeLock.acquireCpuWakeLock(this); Log.e(\ }

? 铃声: private AlarmPreference mAlarmPref;

通过AlarmPreference类继承RingtonePreference类。

RingtonePreference 专门处理铃声。可以在应用程序中使用它为用户提供一个选项,以便选择某个铃声作为首选项。

? 设置闹铃重复: private RepeatPreference mRepeatPref;

通过RepeatPreference类继承ListPreference类。

ListPreference相当于windows的下拉列表框,提供用户可选项和默认选项。 通过重写onPrepareDialogBuilder方法创建一个下拉列表

@Override

protected void onPrepareDialogBuilder(Builder builder) { Log.e(\

CharSequence[] entries = getEntries();

CharSequence[] entryValues = getEntryValues();

builder.setMultiChoiceItems(

entries, mDaysOfWeek.getBooleanArray(),

new DialogInterface.OnMultiChoiceClickListener() {

//监听选中项

public void onClick(DialogInterface dialog, int which, boolean isChecked) {Log.e(\ mNewDaysOfWeek.set(which, isChecked); } });

}

通过重写onDialogClosed方法和getDaysOfWeek方法,来获取更新后的值。

? deleteAlarm方法,在设置界面,删除闹铃 private void deleteAlarm() {Log.e(\ new AlertDialog.Builder(this)

.setTitle(getString(R.string.delete_alarm))

.setMessage(getString(R.string.delete_alarm_confirm)) .setPositiveButton(android.R.string.ok,

new DialogInterface.OnClickListener() {

public void onClick(DialogInterface d, int w) {

25


Android原生模块DeskClock分析1(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:行政人事主管试用期工作总结

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: