我有一個時間選擇器對話框,我在偏好活動中使用。我希望時間選擇器選擇的時間使用報警服務來安排任務。但我希望timepicker選擇的時間用於鬧鐘。我使用sharedpreference但我無法使它工作。有人可以幫我嗎?如何從timepicker對話框中獲取時間到偏好活動?
這是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);
}
}
這是偏好活動
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;
}
});
在這裏,我想通過timepicker對話框中選擇了時間的複選框偏好而不是我上面使用的「時間」。
這是偏好活動
<?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);
}
On Preference是否需要打開對話框? –
不,我可以打開對話框。和時間選擇器完美的工作。但我希望timepicker選擇我的偏好活動的時間。即包含鬧鐘的複選框首選項 –
要打開對話框,您可以更新該對話框嗎? –