Search code examples
androidtimepickerpreferenceactivity

How to get time from timepicker dialog to preference activity?


I have a time picker dialog which i use in the preference activity. i want the time picked by the time picker to schedule a task using alarm service. but i want the time picked by the timepicker to be used for the alarm. i used sharedpreference but i couldnt make it work. Can anybody help me with it?

This is the TimePicker dialog

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

}

This is the checkbox preference in the preference 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;
        }
    });

here i want the time picked by the timepicker dialog to be used instead of the "time" i used above.

this is the xml file of the preference 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>     

Edited

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

Solution

  • Try this below code I used code and checked,the newValue you will get is the time you selected from time preference dialog.

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