桌面哪个地方有时间格式?
貌似 修改格式不会发intent
只有改时间和改12-24制式 才有intent

解决方案 »

  1.   


        @Override
        protected void onResume() {// Resume:重新开始
            super.onResume();
            
            getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);        ((CheckBoxPreference)mTime24Pref).setChecked(is24Hour());        // Register for time ticks and other reasons for time change
            IntentFilter filter = new IntentFilter();
            filter.addAction(Intent.ACTION_TIME_TICK);
            filter.addAction(Intent.ACTION_TIME_CHANGED);
            filter.addAction(Intent.ACTION_TIMEZONE_CHANGED);
            registerReceiver(mIntentReceiver, filter, null, null);
            
            updateTimeAndDateDisplay();
        }    @Override 
        protected void onPause() {
            super.onPause();
            unregisterReceiver(mIntentReceiver);
            getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
        }
        
        private void updateTimeAndDateDisplay() {
            java.text.DateFormat shortDateFormat = DateFormat.getDateFormat(this);
            Date now = Calendar.getInstance().getTime();
            Date dummyDate = mDummyDate.getTime();
            mTimePref.setSummary(DateFormat.getTimeFormat(this).format(now));
            mTimeZone.setSummary(getTimeZoneText());
            mDatePref.setSummary(shortDateFormat.format(now));
            mDateFormat.setSummary(shortDateFormat.format(dummyDate));
        }    public void onDateSet(DatePicker view, int year, int month, int day) {
            Calendar c = Calendar.getInstance();        c.set(Calendar.YEAR, year);
            c.set(Calendar.MONTH, month);
            c.set(Calendar.DAY_OF_MONTH, day);
            long when = c.getTimeInMillis();        if (when / 1000 < Integer.MAX_VALUE) {
                SystemClock.setCurrentTimeMillis(when);
            }
            updateTimeAndDateDisplay();
        }    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
            Calendar c = Calendar.getInstance();        c.set(Calendar.HOUR_OF_DAY, hourOfDay);
            c.set(Calendar.MINUTE, minute);
            long when = c.getTimeInMillis();        if (when / 1000 < Integer.MAX_VALUE) {
                SystemClock.setCurrentTimeMillis(when);
            }
            updateTimeAndDateDisplay();
            
            // We don't need to call timeUpdated() here because the TIME_CHANGED
            // broadcast is sent by the AlarmManager as a side effect of setting the
            // SystemClock time.
        }    public void onSharedPreferenceChanged(SharedPreferences preferences, String key) {
            if (key.equals(KEY_DATE_FORMAT)) {
                String format = preferences.getString(key, 
                        getResources().getString(R.string.default_date_format));
                Settings.System.putString(getContentResolver(), 
                        Settings.System.DATE_FORMAT, format);
                updateTimeAndDateDisplay();
            } else if (key.equals(KEY_AUTO_TIME)) {
                boolean autoEnabled = preferences.getBoolean(key, true);
                Settings.System.putInt(getContentResolver(), 
                        Settings.System.AUTO_TIME, 
                        autoEnabled ? 1 : 0);
                mTimePref.setEnabled(!autoEnabled);
                mDatePref.setEnabled(!autoEnabled);
                mTimeZone.setEnabled(!autoEnabled);
            }
        }    @Override
        public Dialog onCreateDialog(int id) {
            Dialog d;        switch (id) {
            case DIALOG_DATEPICKER: {
                final Calendar calendar = Calendar.getInstance();
                d = new DatePickerDialog(
                    this,
                    this,
                    calendar.get(Calendar.YEAR),
                    calendar.get(Calendar.MONTH),
                    calendar.get(Calendar.DAY_OF_MONTH));
                d.setTitle(getResources().getString(R.string.date_time_changeDate_text));
                break;
            }
            case DIALOG_TIMEPICKER: {
                final Calendar calendar = Calendar.getInstance();
                d = new TimePickerDialog(
                        this,
                        this,
                        calendar.get(Calendar.HOUR_OF_DAY),
                        calendar.get(Calendar.MINUTE),
                        DateFormat.is24HourFormat(this));
                d.setTitle(getResources().getString(R.string.date_time_changeTime_text));
                break;
            }
            default:
                d = null;
                break;
            }        return d;
        }    @Override
        public void onPrepareDialog(int id, Dialog d) {
            switch (id) {
            case DIALOG_DATEPICKER: {
                DatePickerDialog datePicker = (DatePickerDialog)d;
                final Calendar calendar = Calendar.getInstance();
                datePicker.updateDate(
                        calendar.get(Calendar.YEAR),
                        calendar.get(Calendar.MONTH),
                        calendar.get(Calendar.DAY_OF_MONTH));
                break;
            }
            case DIALOG_TIMEPICKER: {
                TimePickerDialog timePicker = (TimePickerDialog)d;
                final Calendar calendar = Calendar.getInstance();
                timePicker.updateTime(
                        calendar.get(Calendar.HOUR_OF_DAY),
                        calendar.get(Calendar.MINUTE));
                break;
            }
            default:
                break;
            }
        }
        
        @Override
        public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
            if (preference == mDatePref) {
                showDialog(DIALOG_DATEPICKER);
            } else if (preference == mTimePref) {
                // The 24-hour mode may have changed, so recreate the dialog
                removeDialog(DIALOG_TIMEPICKER);
                showDialog(DIALOG_TIMEPICKER);
            } else if (preference == mTime24Pref) {
                set24Hour(((CheckBoxPreference)mTime24Pref).isChecked());
                updateTimeAndDateDisplay();
                timeUpdated();
            } else if (preference == mTimeZone) {
                Intent intent = new Intent();
                intent.setClass(this, ZoneList.class);
                startActivityForResult(intent, 0);
            }
            return false;
        }
        
        @Override
        protected void onActivityResult(int requestCode, int resultCode,
                Intent data) {
            updateTimeAndDateDisplay();
        }
        
        private void timeUpdated() {
            Intent timeChanged = new Intent(Intent.ACTION_TIME_CHANGED);
            sendBroadcast(timeChanged);
        }
        
        /**  Get & Set values from the system settings  */
        
        private boolean is24Hour() {
            return DateFormat.is24HourFormat(this);
        }
        
        private void set24Hour(boolean is24Hour) {
            Settings.System.putString(getContentResolver(),
                    Settings.System.TIME_12_24,
                    is24Hour? HOURS_24 : HOURS_12);
        }
        
        private String getDateFormat() {
            return Settings.System.getString(getContentResolver(), 
                    Settings.System.DATE_FORMAT);
        }
          
        private boolean getAutoState() {
            try {
                return Settings.System.getInt(getContentResolver(), 
                    Settings.System.AUTO_TIME) > 0;            
            } catch (SettingNotFoundException snfe) {
                return true;
            }
        }    private void setDateFormat(String format) {
            if (format.length() == 0) {
                format = null;
            }        Settings.System.putString(getContentResolver(), Settings.System.DATE_FORMAT, format);        
        }
        
        /**  Helper routines to format timezone */
        
        private String getTimeZoneText() {
            TimeZone    tz = java.util.Calendar.getInstance().getTimeZone();
            boolean daylight = tz.inDaylightTime(new Date());
            StringBuilder sb = new StringBuilder();        sb.append(formatOffset(tz.getRawOffset() +
                                   (daylight ? tz.getDSTSavings() : 0))).
                append(", ").
                append(tz.getDisplayName(daylight, TimeZone.LONG));        return sb.toString();        
        }    private char[] formatOffset(int off) {
            off = off / 1000 / 60;        char[] buf = new char[9];
            buf[0] = 'G';
            buf[1] = 'M';
            buf[2] = 'T';        if (off < 0) {
                buf[3] = '-';
                off = -off;
            } else {
                buf[3] = '+';
            }        int hours = off / 60; 
            int minutes = off % 60;        buf[4] = (char) ('0' + hours / 10);
            buf[5] = (char) ('0' + hours % 10);        buf[6] = ':';        buf[7] = (char) ('0' + minutes / 10);
            buf[8] = (char) ('0' + minutes % 10);        return buf;
        }
        
        private BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                updateTimeAndDateDisplay();
            }
        };
    }