2017-02-02 15 views
1

У меня есть приложение, которое планирует некоторые действия с помощью службы AlarmManager. Он работает много раз, однако иногда он не отправляет широковещательную рассылку, поэтому широковещательный приемник ничего не получает (даже когда приложение работает и работает на фронте). Я читал время тревоги из виджета TimePicker. Вот мои фрагменты кода:Android: Тревога не срабатывает иногда

Set Alarm:

private void setAlarm(int hour, int minute) { 
    //define intent and parameters 
    Intent intent = new Intent(getApplicationContext(), AlarmReceiver.class); 
    intent.putExtra(TAG_NAME, name); 
    intent.putExtra(TAG_ADDRESS, address); 
    intent.putExtra(TAG_AVERAGE, average); 
    intent.putExtra(TAG_DATABASE_ID, dbID); 
    //define alarm pedning intent 
    PendingIntent alarmIntent = PendingIntent.getBroadcast(getApplicationContext(),(int)dbID, 
      intent, PendingIntent.FLAG_UPDATE_CURRENT); 
    //calculate alarm time 
    Calendar currentTimeCalendar = Calendar.getInstance(); 


    currentTimeCalendar.set(Calendar.HOUR_OF_DAY, hour); 
    currentTimeCalendar.set(Calendar.MINUTE, minute); 
    currentTimeCalendar.set(Calendar.SECOND, 0); 

    int h = currentTimeCalendar.get(Calendar.HOUR_OF_DAY); 
    int m = currentTimeCalendar.get(Calendar.MINUTE); 
    int s= currentTimeCalendar.get(Calendar.SECOND); 
    Toast.makeText(getApplicationContext(), "Hour "+h+":"+m+":"+s, Toast.LENGTH_LONG).show(); 


    SimpleDateFormat dateFormat = new SimpleDateFormat("DD-MMM-yyyy hh:mm:ss"); 
    String date = dateFormat.format(currentTimeCalendar.getTime()); 
    Log.v("VSB_TAG","Alarm Time: "+date); 
    // set alarm 
    AlarmManager alarmMgr = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE); 
    alarmMgr.set(AlarmManager.RTC_WAKEUP, currentTimeCalendar.getTimeInMillis(), alarmIntent); 

} 

Broadcast приемник:

public class AlarmReceiver extends BroadcastReceiver { 
    public AlarmReceiver() { 
    } 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Bundle bundle = intent.getExtras(); 
     Log.v("VHB_TAG", "Alarm Received"); 
     if (bundle == null) 
      return; 
     String name = bundle.getString(StudentDetailsActivity.TAG_NAME); 
     String address = bundle.getString(StudentDetailsActivity.TAG_ADDRESS); 
     double average = bundle.getDouble(StudentDetailsActivity.TAG_AVERAGE); 
     long dbID = bundle.getLong(StudentDetailsActivity.TAG_DATABASE_ID); 
     Toast.makeText(context, "Alarm for " + name, Toast.LENGTH_LONG).show(); 

     displayStudentNotification(context, name, address, dbID,bundle); 

    } 

    private void displayStudentNotification(Context context, String name, String address, long dbID, Bundle bundle) { 
     .... 
     .... 
    } 

} 

А вот манифеста:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="net.evegroup.studentslist"> 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 
     <activity android:name=".MainActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity android:name=".StudentDetailsActivity" /> 

     <receiver 
      android:name=".AlarmReceiver" 
      android:enabled="true" 
      android:exported="true"></receiver> 
    </application> 

</manifest> 

ответ

1

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

Если установлен будильник, он срабатывает, поэтому вам необходимо проверить правильность установки или ожидаемого.

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

+0

Итак, вы говорите, что общая логика кода, который я опубликовал, кажется прекрасным? – VSB

+0

Я не проверял его, но вы говорите, что код работает иногда, поэтому ваша проблема скорее связана с использованием кода, а не с самим кодом. – Kuffs