У меня есть приложение, которое планирует некоторые действия с помощью службы 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>
Итак, вы говорите, что общая логика кода, который я опубликовал, кажется прекрасным? – VSB
Я не проверял его, но вы говорите, что код работает иногда, поэтому ваша проблема скорее связана с использованием кода, а не с самим кодом. – Kuffs