2015-07-23 3 views
2

Я работаю над небольшим применением радиолокационной антенны. Приложение извлекает радиопоток из Интернета и воспроизводит его по Media Player. Все работает отлично, но моя следующая проблема заключается в добавлении тревоги в том же приложении. Тревога запустит радио на определенную дату (день, час, минута). Тревога выглядит так же, как официальный будильник Android. Раскладка: alarm.xmlНедельная повторяющаяся тревога

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:background="#ff4379df"> 
    <TimePicker 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/timePicker" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" /> 
    <LinearLayout 
     android:weightSum="7" 
     android:orientation="horizontal" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/timePicker" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true"> 
     <ToggleButton 
      android:textOn="P" 
      android:textOff="P" 
      android:layout_weight="1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/chk_monday" /> 
     <ToggleButton 
      android:textOn="U" 
      android:textOff="U" 
      android:layout_weight="1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/chk_tuesday" /> 
     <ToggleButton 
      android:textOn="S" 
      android:textOff="S" 
      android:layout_weight="1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/chk_wednesday" /> 
     <ToggleButton 
      android:textOn="C" 
      android:textOff="C" 
      android:layout_weight="1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/chk_thursday" /> 
     <ToggleButton 
      android:textOn="P" 
      android:textOff="P" 
      android:layout_weight="1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/chk_friday" /> 
     <ToggleButton 
      android:textOn="S" 
      android:textOff="S" 
      android:layout_weight="1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/chk_sat" /> 
     <ToggleButton 
      android:textOn="N" 
      android:textOff="N" 
      android:layout_weight="1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/chk_sunday" /> 
    </LinearLayout> 
</RelativeLayout> 

И alarm.java, который является (вкладка) Фрагмент Обновлено 2 #

public class alarm extends Fragment { 
    TimePicker timePicker; 
    ToggleButton chk_monday; 
    ToggleButton chk_tuesday; 
    ToggleButton chk_wednesday; 
    ToggleButton chk_thursday; 
    ToggleButton chk_friday; 
    ToggleButton chk_sat; 
    ToggleButton chk_sunday; 
    TextView textView; 
    final static int RQS_1 = 1; 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 

     View rootView = inflater.inflate(R.layout.alarm, container, false); 
     final ToggleButton chk_monday = (ToggleButton) rootView.findViewById(R.id.chk_monday); 
     ToggleButton chk_tuesday = (ToggleButton) rootView.findViewById(R.id.chk_tuesday); 
     ToggleButton chk_wednesday = (ToggleButton) rootView.findViewById(R.id.chk_wednesday); 
     ToggleButton chk_thursday = (ToggleButton) rootView.findViewById(R.id.chk_thursday); 
     ToggleButton chk_friday = (ToggleButton) rootView.findViewById(R.id.chk_friday); 
     ToggleButton chk_sat = (ToggleButton) rootView.findViewById(R.id.chk_sat); 
     ToggleButton chk_sunday = (ToggleButton) rootView.findViewById(R.id.chk_sunday); 



     TimePicker timePicker = (TimePicker) rootView.findViewById(R.id.timePicker); 
     timePicker.setIs24HourView(true); 
     /**/ 
     Calendar calSet = Calendar.getInstance(); 
     int hour = calSet.get(Calendar.HOUR_OF_DAY); 
     int min = calSet.get(Calendar.MINUTE); 
     timePicker.setCurrentHour(hour); 
     timePicker.setCurrentMinute(min); 
     /**/ 

     if (chk_monday.isChecked()) { 
      forday(2); 
     } if (chk_tuesday.isChecked()) { 
      forday(3); 
     } if (chk_wednesday.isChecked()) { 
      forday(4); 
     } if (chk_thursday.isChecked()) { 
      forday(5); 
     }if (chk_friday.isChecked()) { 
      forday(6); 
     } if (chk_sat.isChecked()) { 
      forday(7); 
     }if (chk_sunday.isChecked()) { 
      forday(1); 
     } 



     return rootView; 


    } 
    public void forday (int week) { 
     Calendar calSet = Calendar.getInstance(); 
     calSet.set(Calendar.DAY_OF_WEEK, week); 
     calSet.set(Calendar.HOUR_OF_DAY, timePicker.getCurrentHour()); 
     calSet.set(Calendar.MINUTE, timePicker.getCurrentMinute()); 
     calSet.set(Calendar.SECOND, 0); 
     calSet.set(Calendar.MILLISECOND, 0); 
     Intent intent = new Intent(getActivity().getBaseContext(), AlarmReceiver.class); 
     PendingIntent pendingIntent = PendingIntent.getBroadcast(getActivity().getApplicationContext(), RQS_1, intent, 0); 
     AlarmManager alarmManager = (AlarmManager) getActivity().getSystemService(Context.ALARM_SERVICE); 
     alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calSet.getTimeInMillis(), 1 * 60 * 60 * 1000, pendingIntent); 

    } 
} 

Теперь моя цель состоит в том, чтобы сделать его повторять каждый день, час, минуту, когда пользователь заявляет об этом. Плюс он должен оставаться в TextView день и время, когда пользователь установил его. + Я использовал this link, чтобы немного поправить себя.

Update 2 # Создано AlarmReceiver.java

public class AlarmReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     // TODO Auto-generated method stub 

     Log.e("onReceive", "Recived!"); 
     Toast.makeText(context, "OnRecive!", Toast.LENGTH_SHORT).show(); 
    } 
} 

Добавлен приемник AndroidManifest.xml

<receiver android:name=".AlarmReceiver"></receiver> 
+0

Кажется, вы на правильном пути, я не уверен, какова ваша проблема на самом деле. Вы можете сохранить дату, установленную пользователем в вашем «SharedPreferences», например, и когда вы извлекаете свой «Активность»/«Фрагмент», восстановите значение и установите его в свой «TextView» –

+0

. Я надеюсь, что он на правильном пути , Я пробовал это целыми днями, все еще ничего. Моя проблема - кнопка, которая сохранит все. Как сделать его? – FiN

+0

Почему вы получаете информацию о днях, если вы собираетесь ежедневно ее запускать? Просто используйте «HH: mm: SS.ms» – Alpaslan

ответ

-1

Могли бы вы не просто сохранить предыдущую дату тревоги в приложения общих настройках, то при срабатывает тревога, просто увеличивайте значение на 1 день и снова сохраните значение?

0

Я запрограммировал аналогичную функцию. Я решил это, выполнив следующую тревожную тревогу с запуском текущего будильника и запустив новый Намерение за AlarmManager.

Таким образом, каждый аварийный сигнал перезапускает себя в onStartCommand. Моя модель сигнала тревоги имеет метод, подобный getNextAlarmTime(), чтобы получить следующую временную метку для выполнения.

Возможно, это дает вам свежие идеи.

Смежные вопросы