我希望我的应用每天通知用户,并且我使用AlarmManager
来实现该功能。但是,通知未显示。另外,我没有任何错误或例外。
这是我设置AlarmManager的代码的一部分(重复间隔为1000ms进行测试,我会在实际程序中更改它):
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
Intent intent1 = new Intent(this, Notify.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent1, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager am = (AlarmManager) this.getSystemService(this.ALARM_SERVICE);
am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 1000, pendingIntent);
这是onReceive()
类中的Notify
,其范围为BroadcastReceiver
:
public void onReceive(Context context, Intent intent) {
NotificationCompat.Builder n=new NotificationCompat.Builder(context);
n.setAutoCancel(true);
n.setSmallIcon(R.mipmap.ic_launcher);
n.setTicker("ticker");
n.setWhen(System.currentTimeMillis());
n.setContentTitle("title");
n.setContentText("text");
Intent it=new Intent(context,ListAll.class);
PendingIntent pi=PendingIntent.getBroadcast(context,0, it,0);
n.setContentIntent(pi);
((NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE)).notify(uniqueID,n.build());
}
我在Manifest.xml中添加了以下内容:
<uses-permission android:name="com.android.alarm.permission.SET_ALARM"/>
<receiver android:name=".Notify" android:process=":remote" />
答案 0 :(得分:1)
我非常确定您的用户设备根本不需要重启,否则您的闹钟将会消失,除非他们重新启动您的应用,并且您的应用知道再次设置闹钟。
找到的文件:
默认情况下,设备关闭时会取消所有警报。至 防止这种情况发生,你可以设计你的应用程序 如果用户重新启动,则自动重新启动重复警报 设备。这可确保AlarmManager继续执行此操作 任务,无需用户手动重启警报。
来自http://developer.android.com/training/scheduling/alarms.html页面
您正在设置要触发的警报every 1 second这可能是问题,如果内部代码只是丢掉这样的警报,我不会感到惊讶。 (为了设备+电池的健全性)
来自这里的示例:http://developer.android.com/training/scheduling/alarms.html#set 你错过了这样的行,你设置了什么时间&#39;警报应该响起。
时间&#39;当您告诉警报管理器设置重复警报时,calendar.setTimeInMillis(System.currentTimeMillis());
已经过了。因此,我不确定它会给你的行为,但它可能是你接受的不良行为。试着告诉警报“关闭”。在5分钟内,每20分钟重复一次。 (如指南中的示例)。看看是否有帮助。
calendar.set(Calendar.HOUR_OF_DAY, 8);
calendar.set(Calendar.MINUTE, 30);
我认为你正在将AlarmManager与AlarmClock混为一谈。
https://developer.android.com/reference/android/app/AlarmManager.html
和
https://developer.android.com/reference/android/provider/AlarmClock.html
我认为你根本不需要<uses-permission android:name="com.android.alarm.permission.SET_ALARM"/>
,因为你不是在编写闹钟应用程序。你只是想用'&#39;报警。
This guide应该可以帮助您减少代码。因为您需要设置一个广播接收器,以便在android.permission.RECIEVE_BOOT_COMPLETED上收到通知,并且该代码具有如何执行此操作的代码。 (每次手机重新启动时重启&#39;你的闹钟)