2014-12-20 2 views
1

* Я разрабатываю приложение для Android, которое вызывает тревогу в определенное время, которое пользователь выбирает. Но проблема в том, что этот сигнал тревоги срабатывает только в том случае, если пользователь устанавливает его на небольшое количество времени. Так что, если приложение не работает, сигнал тревоги не будет срабатывать. Я уже приобрел блокировку, а также установил флаги, чтобы держать экран включенным. Иногда, когда я устанавливаю его на 15 минут, или что-то в этом роде, он работает, а затем я пытаюсь снова, а это не так. Я также включил широковещательный приемник в манифест. Вот мой график код тревоги:Сигнализация не всегда запускает андроид

public void schedule(Activity activity){ 
    Context context = activity.getApplicationContext(); 
    AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
    Intent intent = new Intent(context, AlarmActivityBroadcastReceiver.class); 
    intent.putExtra("id", this.getId()); 
    pendingIntent = PendingIntent.getBroadcast(context, 1234565666, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
    alarmManager.setExact(AlarmManager.RTC_WAKEUP, this.getCalendarTime().getTimeInMillis(), pendingIntent); 
} 

Чтобы получить calendarTime я использую следующую функцию, где время является строка времени вводится пользователем:

private Calendar convertTimeStringToCalendar(){ 
    String[] timeArray = this.time.split(":"); 
    int minute = Integer.parseInt(timeArray[1]); 
    int hour = Integer.parseInt(timeArray[0]); 

    Calendar c = Calendar.getInstance(); 
    c.setTimeInMillis(System.currentTimeMillis()); 

    int nowHour = c.get(Calendar.HOUR_OF_DAY); 
    int nowMinute = c.get(Calendar.MINUTE); 
    if (hour < nowHour || (hour == nowHour && minute <= nowMinute)) { 
     c.add(Calendar.DAY_OF_YEAR, 1); 
    } 
    c.set(Calendar.HOUR_OF_DAY, hour); 
    c.set(Calendar.MINUTE, minute); 
    c.set(Calendar.SECOND, 0); 
    c.set(Calendar.MILLISECOND, 0); 
    return c; 
} 

И, наконец, это мой радиовещательный приемник:

public class AlarmActivityBroadcastReceiver extends BroadcastReceiver { 

@Override 
public void onReceive(Context context, Intent intent) { 

    WakeLock.acquire(context); 

    Alarm alarm = DataBaseSQL.getAlarm(intent.getLongExtra("id", 0L)); 
    Intent alarmActivityIntent = new Intent(context, AlarmActivity.class); 
    alarmActivityIntent.putExtra("id", alarm.getId()); 
    alarmActivityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    alarmActivityIntent.addFlags(Intent.FLAG_ACTIVITY_NO_USER_ACTION); 
    context.startActivity(alarmActivityIntent); 
} 
} 

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

+0

', а также установить флаги, чтобы держать экран on' так, чтобы ** убить батарею пользователя **? –

+0

Нет, это будильник, поэтому мне нужен экран, пока пользователь не уволит его! – Martina

ответ

0

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

это метод выборки данных в главном activty

public void fetchdata() {  
      Calendar calendar = Calendar.getInstance(); 
       calendar.set(Calendar.MONTH, month); 
       calendar.set(Calendar.YEAR, year); 
       calendar.set(Calendar.DAY_OF_MONTH, day); 
       calendar.set(Calendar.HOUR_OF_DAY, hour); 
       calendar.set(Calendar.MINUTE, minute); 
       Intent myIntent = new Intent(MainActivity.this, MyBroadcastReceiver.class); 
       pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, myIntent,0); 
       AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); 
       alarmManager.set(AlarmManager.RTC, calendar.getTimeInMillis(), pendingIntent); 
     } 


This is broadcast receiver class 



public class MyBroadcastReceiver extends BroadcastReceiver { 
     int notifyID=1; 
     public void onReceive(Context context, Intent intent) { 

      Intent i=new Intent(); 
      PendingIntent pi=PendingIntent.getBroadcast(context,0,i,0); 
      NotificationManager nm=(NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE); 
      Notification notify=new Notification(R.drawable.ic_launcher,"Notification Triggered",System.currentTimeMillis()); 
      CharSequence from="Remainder"; 
      CharSequence message="Hurry up!!!!"; 
      notify.setLatestEventInfo(context, from, message, pi); 
      nm.notify(notifyID,notify); 

      // Vibrate the mobile phone 
      Vibrator vibrator = (Vibrator) context 
        .getSystemService(Context.VIBRATOR_SERVICE); 
      vibrator.vibrate(2000); 
     } 

    } 
+0

В моем проекте уведомление о тревоге появляется после установки тревоги. –

+0

Спасибо за ваш ответ! Мне удалось заставить его работать, используя getService вместо getBroadcast и, следовательно, используя службу. – Martina

+0

okk это замечательно @Martina –

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