Android未来通知未显示

时间:2015-12-24 00:03:54

标签: android notifications alarmmanager

我希望我的应用每天通知用户,并且我使用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" />

1 个答案:

答案 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;你的闹钟)