簡體   English   中英

使用Android通知時出現奇怪的錯誤

[英]Strange error while using Android Notifications

Helo,我有一個Android應用程序,可以提醒用戶每天在特定時間服葯。 因此,我使用Notifications和BroadcastReceiver。 現在,我將通知設置為在特定時間(例如6小時內)顯示時,在該特定時間我只會收到“ [App]已停止”對話。但是當我進入調試模式並將通知設置為出現時在1分鍾之內,它將通過所有方法而沒有任何錯誤,並且我得到了Notification。 我的BroadcastReceiver類如下

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;
    }
}

}

警報通過以下方式設置(在另一個活動中):

AlarmReceiver receiver = new AlarmReceiver();
receiver.cancelAlarm(NotificationActivity.this);
receiver.setRecurringAlarm(NotificationActivity.this);

誰能幫我?

我在您的幫助下找到了它。 不知道您可以在控制台上發出logcat錯誤。 該錯誤是在收到通知時發生錯誤的數據庫查找。

謝謝

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM