2015-11-28 3 views
1

У меня есть диалог выбора времени, который я использую в активности предпочтений. Я хочу, чтобы время, выбранное таймером, планировало задачу с помощью службы аварийной сигнализации. но я хочу, чтобы время, выбранное таймером, использовалось для тревоги. Я использовал 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-файл привилегированной активности

<?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); 
}   
+0

При изменении предпочтений вы хотите открыть диалог? –

+1

нет .. я могу открыть диалог. и сборщик времени работает идеально. но я хочу, чтобы время, выбранное timepicker, использовалось для моей активности предпочтений. т.е. предпочтение флажка, которое содержит сигнал тревоги –

+0

. Когда вы открываете диалог, можете ли вы его обновить? –

ответ

3

Попробуйте это ниже кода я использовал код и проверенный, новое_значение вы получите это время вы выбрали время от диалог предпочтений.

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

большое вам спасибо. его рабочий :) –

+0

Строка tt = newValue.toString(); preference.setTitle (tt); Я пробовал ваш код и его работу отлично. и я добавил этот код, чтобы установить время, которое я выбираю как название и его работу. но когда я покидаю эту страницу и вернусь, заголовок сбрасывается. как сохранить заголовок, который я установил? –

+0

@shinil дайте мне некоторое время, я скажу, что –