2014-01-16 1 views
0

* привет! Я использую Custom DialogPreference, но я хочу запустить службу, когда пользователь устанавливает время. Т.е. запустите alrmmanager для работы. Но когда я нахожу свой код в методе onTimeSet(), он не позволяет добавить там службу будильника. так что каждый может помочь, как это возможно *Как установить Alram t Start Service в DialogPreference

public class Timer extends DialogPreference { 
    protected int lastHour=0; 
    protected int lastMinute=0; 
    protected boolean is24HourFormat; 
    protected TimePicker picker=null; 
    protected TextView timeDisplay; 

    DatagramPacket send; 
    DatagramSocket d1; 
    InetAddress ip; 

    public Timer(Context ctxt) { 
     this(ctxt, null); 
    } 

    public Timer(Context ctxt, AttributeSet attrs) { 
     this(ctxt, attrs, 0); 
    } 

    public Timer(Context ctxt, AttributeSet attrs, int defStyle) { 
     super(ctxt, attrs, defStyle); 

     is24HourFormat = DateFormat.is24HourFormat(ctxt); 
     setPositiveButtonText("Set"); 
     setNegativeButtonText("Cancel"); 
    } 

    @Override 
    public String toString() { 
     if(is24HourFormat) { 
      return ((lastHour < 10) ? "0" : "") 
        + Integer.toString(lastHour) 
        + ":" + ((lastMinute < 10) ? "0" : "") 
        + Integer.toString(lastMinute); 
     } else { 
      int myHour = lastHour % 12; 
      return ((myHour == 0) ? "12" : ((myHour < 10) ? "0" : "") + Integer.toString(myHour)) 
        + ":" + ((lastMinute < 10) ? "0" : "") 
        + Integer.toString(lastMinute) 
        + ((lastHour >= 12) ? " PM" : " AM"); 
     } 
    } 

    @Override 
    protected View onCreateDialogView() { 
     picker=new TimePicker(getContext().getApplicationContext()); 
     return(picker); 
    } 

    @Override 
    protected void onBindDialogView(View v) { 
     super.onBindDialogView(v); 
     picker.setIs24HourView(is24HourFormat); 
     picker.setCurrentHour(lastHour); 
     picker.setCurrentMinute(lastMinute); 
    } 

    @Override 
    public void onBindView(View view) { 
     View widgetLayout; 
     int childCounter = 0; 
     do { 
      widgetLayout = ((ViewGroup) view).getChildAt(childCounter); 
      childCounter++; 
     } while (widgetLayout.getId() != android.R.id.widget_frame); 
     ((ViewGroup) widgetLayout).removeAllViews(); 
     timeDisplay = new TextView(widgetLayout.getContext()); 
     timeDisplay.setText(toString()); 
     ((ViewGroup) widgetLayout).addView(timeDisplay); 
     super.onBindView(view); 
    } 

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

     if (positiveResult) { 
      picker.clearFocus(); 
      lastHour=picker.getCurrentHour(); 
      lastMinute=picker.getCurrentMinute(); 

      String time=String.valueOf(lastHour)+":"+String.valueOf(lastMinute); 

      if (callChangeListener(time)) { 
       persistString(time); 
       timeDisplay.setText(toString()); 




      } 
     } 
    } 

    @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("00:00"); 
      } 
      else { 
       time=getPersistedString(defaultValue.toString()); 
      } 
     } 
     else { 
      if (defaultValue==null) { 
       time="00:00"; 
      } 
      else { 
       time=defaultValue.toString(); 
      } 
      if (shouldPersist()) { 
       persistString(time); 
      } 
     } 

     String[] timeParts=time.split(":"); 
     lastHour=Integer.parseInt(timeParts[0]); 
     //lastMinute=Integer.parseInt(timeParts[1]); 
    } 

    public void onTimeSet(TimePicker view, int hourOfDay, int minute) { 
     // Do something with the time chosen by the user 




    } 


} 

ответ

0

Вам нужно создать экземпляр менеджера сигнализации, а затем создать намерение для своего класса обслуживания и отложенное намерение, которые будут основаны от времени календаря так создать экземпляр календаря и назначьте ему время, установленное вашим пользователем, чем установить Alar Manager на этот Calendar.getInstance(), как показано ниже.

AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
    Intent intent = new Intent(this, AlarmReceiver.class); 
    PendingIntent alarmIntent = PendingIntent.getBroadcast(this, 0, intent, 0); 
    alarmManager.set(AlarmManager.RTC_WAKEUP, Calendar.getInstance().getTimeInMillis(), alarmIntent); 
+0

это то, что я делаю в onTimeSet() метод выше, но я не говорил об этом ... Но это дает мне сообщение об ошибке, что вы не можете объявить getSystemService метод в onTimeSet() .. – Raman