如何从时间选择器对话框获取时间到首选项 activity?

How to get time from timepicker dialog to preference activity?

我有一个时间选择器对话框,我在首选项中使用它 activity。我希望时间选择器选择的时间使用闹钟服务安排任务。但我希望时间选择器选择的时间用于闹钟。我使用了 sharedpreference 但我无法让它工作。有人可以帮我吗?

这是 TimePicker 对话框

public class TimePreference  extends DialogPreference {
private int lastHour=0;
private int lastMinute=0;
private TimePicker picker=null;
Context c;

public static int getHour(String time) {
    String[] pieces=time.split(":");

    return(Integer.parseInt(pieces[0]));
}

public static int getMinute(String time) {
    String[] pieces=time.split(":");

    return(Integer.parseInt(pieces[1]));
}

public TimePreference(Context ctxt, AttributeSet attrs) {
    super(ctxt, attrs);

    setPositiveButtonText("Set");
    setNegativeButtonText("Cancel");
}

@Override
protected View onCreateDialogView() {
    picker=new TimePicker(getContext());

    return(picker);
}

@Override
protected void onBindDialogView(View v) {
    super.onBindDialogView(v);

    picker.setCurrentHour(lastHour);
    picker.setCurrentMinute(lastMinute);
}

@Override
protected void onDialogClosed(boolean positiveResult) {
    super.onDialogClosed(positiveResult);

    if (positiveResult) {
        lastHour=picker.getCurrentHour();
        lastMinute=picker.getCurrentMinute();
        String hour=String.valueOf(lastHour);
        String minute=String.valueOf(lastMinute);

        String time=hour+":"+minute;

        //Toast.makeText(getContext(), time, Toast.LENGTH_SHORT).show();




        if (callChangeListener(time)) {
            persistString(time);
        }
    }
}

@Override
protected Object onGetDefaultValue(TypedArray a, int index) {
    return(a.getString(index));
}

@Override
protected void onSetInitialValue(boolean restoreValue, Object defaultValue) {
    String time=null;

    if (restoreValue) {
        if (defaultValue==null) {
            time=getPersistedString("06:00");
        }
        else {
            time=getPersistedString(defaultValue.toString());
        }
    }
    else {
        time=defaultValue.toString();
    }

    lastHour=getHour(time);
    lastMinute=getMinute(time);
}

}

这是首选项中的复选框首选项activity

  final Preference pref2 = getPreferenceManager().findPreference("son");
     pref2.setOnPreferenceChangeListener(new      Preference.OnPreferenceChangeListener() {
        @Override
        public boolean onPreferenceChange(Preference preference, Object newValue) {
            if (newValue.equals(true)) {
                // Toast.makeText(getActivity(), "True", Toast.LENGTH_SHORT).show();
                //set alarm will come here
                Long time = new GregorianCalendar().getTimeInMillis() + 5000;
                Intent i2 = new Intent(getActivity(), AlarmReceiver.class);
                AlarmManager alrm = (AlarmManager) getActivity().getSystemService(Context.ALARM_SERVICE);
                alrm.set(AlarmManager.RTC_WAKEUP, time, PendingIntent.getBroadcast(getActivity(), 1, i2, PendingIntent.FLAG_UPDATE_CURRENT));
                Toast.makeText(getActivity(), "Alarm Scheduled for 5 seconds from now", Toast.LENGTH_SHORT).show();
            }else {
                Toast.makeText(getActivity(), "Schedule canceled", Toast.LENGTH_SHORT).show();
            }
            return true;
        }
    });

这里我希望使用时间选择器对话框选择的时间,而不是上面使用的 "time"。

这是首选项的xml文件activity

  <?xml version="1.0" encoding="utf-8"?>
  <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">


 <PreferenceCategory android:title="Schedule On">
  <CheckBoxPreference
    android:title="Schedule Power On"

    android:key="son"
    android:defaultValue="false"

    > </CheckBoxPreference>
<com.example.myapp.TimePreference
    android:key="timePrefA_Key"
    android:title="Pick Time"/>
</PreferenceCategory>
</PreferenceScreen>     

已编辑

      @Override
public void onPause() {
    super.onPause();

    SharedPreferences.Editor editor = mSharedPref.edit(); // get the pref editor
    editor.putString("key1", stringtt); // assign value to the key
    editor.commit();  // save the editors modifications
}
@Override
public void onResume(){
    super.onResume();
  SharedPreferences.Editor editor2 = mSharedPref.edit();
    editor2.getString("key1", null);
}          

尝试下面的代码我使用代码并检查过,您将获得的新值是您从时间首选项对话框中选择的时间。

 Preference preference = getPreferenceManager().findPreference("timePrefA_Key");
     preference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
            @Override
            public boolean onPreferenceChange(Preference preference, Object newValue) {
                Log.d("Preference ", "" + preference);
                Log.d("newValue", "" + newValue);
                return true;
            }
        });