0
안녕하세요, 사용자에게 특정 시간에 매일 약을 먹을 것을 상기시키는 안드로이드 응용 프로그램이 있습니다. 그러므로 나는 Notifications와 BroadcastReceiver를 사용한다. 특정 시간 (예 : 6 시간)에 알림이 표시되도록 설정하면 해당 특정 시간에 "[App]이 (가) 중지되었습니다"대화 상자 만 표시됩니다. 그런 다음 디버그 모드로 이동하여 알림을 표시하도록 설정하면 1 분과 같이 모든 오류없이 모든 방법을 거치며 알림을받습니다. Android 알림 사용 중 이상한 오류가 발생했습니다.
AlarmReceiver receiver = new AlarmReceiver();
receiver.cancelAlarm(NotificationActivity.this);
receiver.setRecurringAlarm(NotificationActivity.this);
이 사람이 나를 도울 수
: 알람이 (다른 활동에서) 다음과 같은 방법을 설정public class AlarmReceiver extends BroadcastReceiver {
String notificationTitle;
String notificationText;
@Override
public void onReceive(Context context, Intent intent) {
//Monday = 1, Tuesday = 2, etc.
int actualDay = new DateTime().getDayOfWeek();
if (getTypeOfNotification() == NotificationType.TYPE_DOSE) {
notificationTitle = context.getString(R.string.notificationPills);
notificationText = context.getString(R.string.notificationDose1)+ " " + DataStorage.getInstance().getSelectedWeeklyDose()[actualDay - 1] + " " + context.getString(R.string.notificationDose2);
}
else {
notificationTitle = context.getString(R.string.notificationMeasurement);
notificationText = context.getString(R.string.notificationMeasurementText);
}
showNotification(context);
}
public void setRecurringAlarm(Context context) {
Calendar updateTime = Calendar.getInstance();
updateTime.set(Calendar.HOUR_OF_DAY, DataStorage.getInstance().getSelectedNotificationTime().getHourOfDay());
updateTime.set(Calendar.MINUTE, DataStorage.getInstance().getSelectedNotificationTime().getMinuteOfHour());
updateTime.set(Calendar.SECOND, 0);
//check if that time is already reached and if yes, start a new alarm tomorrow
Calendar rightNow = Calendar.getInstance();
if (rightNow.after(updateTime)) {
updateTime.add(Calendar.DAY_OF_MONTH, 1);
}
setAlarm(AlarmManager.INTERVAL_DAY, updateTime, context);
}
private void setAlarm(long interval, Calendar updateTime, Context context) {
Intent notificator = new Intent(context, AlarmReceiver.class);
PendingIntent recurringNotification = PendingIntent.getBroadcast(context,
0, notificator, 0);
AlarmManager alarms = (AlarmManager) context.getSystemService(
Context.ALARM_SERVICE);
alarms.cancel(recurringNotification);
alarms.setInexactRepeating(AlarmManager.RTC_WAKEUP,
updateTime.getTimeInMillis(), interval, recurringNotification);
}
public void cancelAlarm(Context context) {
Intent notificator = new Intent(context, AlarmReceiver.class);
AlarmManager alarms = (AlarmManager) context.getSystemService(
Context.ALARM_SERVICE);
PendingIntent cancelNotification = PendingIntent.getBroadcast(context,
0, notificator, PendingIntent.FLAG_CANCEL_CURRENT);
alarms.cancel(cancelNotification);
}
private void showNotification(Context context){
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
Intent myIntent = new Intent(Intent.ACTION_VIEW);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0,
myIntent, Intent.FLAG_ACTIVITY_NEW_TASK);
Notification noti = new NotificationCompat.Builder(context)
.setContentTitle(notificationTitle)
.setContentText(notificationText)
.setSmallIcon(R.drawable.pills)
.setContentIntent(pendingIntent).build();
noti.defaults |= Notification.DEFAULT_SOUND;
noti.flags |= Notification.FLAG_AUTO_CANCEL;
notificationManager.notify(0, noti);
}
private NotificationType getTypeOfNotification() {
DateTime latestMeasurement = DataStorage.getInstance().getLatestMeasurementDate();
//First check special case if there is no latest measurement. Then set actual date.
if (latestMeasurement != null) {
Calendar today = Calendar.getInstance();
if (today.get(Calendar.DAY_OF_YEAR) - latestMeasurement.getDayOfYear() == DataStorage.getInstance().getSelectedMeasureInterval()) {
return NotificationType.TYPE_MEASUREMENT;
}
else return NotificationType.TYPE_DOSE;
}
else {
return NotificationType.TYPE_DOSE;
}
}
}는 다음과 같이 내 브로드 캐스트 리시버 클래스는?
귀하의 logcat 오류를 게시하십시오. –
귀하의 휴대 전화가 컴퓨터에 연결되어있는 상태에서'adb logcat'. – Pedantic