警报+通知:没有任何反应

时间:2013-03-07 15:28:08

标签: android notifications alarm

我正在尝试实施一个警报,每天在同一时刻显示通知。

这是我在我的活动中调用的函数:

private void restartNotify() {
    AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);

    // Intent for our BroadcastReceiver 
    Intent intent = new Intent(this, AlarmReceiver.class);

    // PendingIntent for AlarmManager
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT );

    // In case we have already set up AlarmManager, we cancel.
    am.cancel(pendingIntent);



    am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+10000, pendingIntent);           
}

这是我的广播接收器类

public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
    NotificationManager nm = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);   
    Notification notification = new Notification(R.drawable.icon_notif, context.getString(R.string.NotificationLaunchMssg), System.currentTimeMillis());

    // This is intent we want to launch when user clicks on the notification.
    Intent intentTL = new Intent(context, MyClass.class);

    notification.setLatestEventInfo(context, context.getString(R.string.NotificationTitle), context.getString(R.string.NotificationBody),               
    PendingIntent.getActivity(context, 0, intentTL, PendingIntent.FLAG_CANCEL_CURRENT));

    nm.notify(1, notification);

    //Here we set next notification, in day interval
    AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
    am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+10000, pendingIntent); 
}
}

正如您在此代码中看到的,我使用的是测试值(+10000毫秒),因为我只是在应用程序启动10秒后尝试触发警报。但它不起作用,没有任何显示。 我不知道警报是否有问题,或通知,没有任何事情发生。

你知道为什么吗?

感谢您的帮助

编辑:在AlarmReceiver方法中添加一些测试代码之后,事实证明这个代码永远不会运行。所以我可能不会正确地调用它,出了什么问题?

1 个答案:

答案 0 :(得分:0)

请勿使用此方法尝试使用setInexactRepeating(...)或setRepeating(...)。为什么每次收到意图时,你都会向BroadcastReceiver提供额外的工作来设置警报。

这是一个小代码:

alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
            0, 10000, pendingIntent);
// The pending intent will the same as yours. 10000 is the 
// interval for between consecutive alarms

作为azertiti在评论中提到“当它注册时,时间已经过去了。”所以使用0或System.currentTimeMillis()。