Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android AlarmManager没有';当通过calendar.getTimeInMillis()设置时,不会关闭_Android_Android Service_Alarmmanager - Fatal编程技术网

Android AlarmManager没有';当通过calendar.getTimeInMillis()设置时,不会关闭

Android AlarmManager没有';当通过calendar.getTimeInMillis()设置时,不会关闭,android,android-service,alarmmanager,Android,Android Service,Alarmmanager,问题是AlarmManager不工作,或者可能是日历有问题。因为当我将其更改为这个startNotif.set(AlarmManager.RTC_WAKEUP,System.currentTimeMillis()+1000,pendingNotifications)时(从calendar.getTimeInMillis-->System.currentTimeMillis()+1000)它工作正常,但仅适用于第一次报警。尽管您认为所有(本例中为5个)警报/通知会同时发出(在1000个工厂中),但

问题是AlarmManager不工作,或者可能是日历有问题。因为当我将其更改为这个
startNotif.set(AlarmManager.RTC_WAKEUP,System.currentTimeMillis()+1000,pendingNotifications)时(从
calendar.getTimeInMillis
-->
System.currentTimeMillis()+1000
)它工作正常,但仅适用于第一次报警。尽管您认为所有(本例中为5个)警报/通知会同时发出(在1000个工厂中),但只有第一个警报/通知会发出

我知道所有的警报都设置好了,因为我已经广泛使用了Log.D:s。 日历有正确的毫秒数,我用许多不同的方法检查过

这是我的许可:

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this)
            .setSmallIcon(R.drawable.main_icon)
            .setContentTitle(lesson)
            .setTicker(lesson + " starts in 5 minutes")
            .setContentText(lesson + " from " + startTime + " to " + endTime);

    mBuilder.setDefaults(Notification.DEFAULT_LIGHTS);
    mBuilder.setDefaults(Notification.DEFAULT_VIBRATE);

    NotificationManager mNotificationManager = (NotificationManager) this.getSystemService(this.NOTIFICATION_SERVICE);
    mNotificationManager.notify(1, mBuilder.build());

    stopSelf();

和服务:

<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.CLEAR_APP_CACHE"/>
<uses-permission android:name="com.android.alarm.permission.SET_ALARM"/>

...

首先,您需要更改创建
挂起内容的行。问题是,您正在创建具有某些挂起意图的第一个报警,而在第二个循环(您希望为第二个课程创建报警)上,您使用的是相同的挂起意图,依此类推

当对两个不同的报警使用相同的挂起意图时,将只设置最后一个报警,然后触发,并从系统中删除前一个报警

5节课中的每节课都需要不同的待定意图。在您的情况下,您需要使用不同的
requestCode
,因为您的
意图相同(pendingent不会比较额外的内容)。简单的解决方案可能是将
的整数
i
传递给
循环

    <service android:enabled="true" android:name=".Notifications" />
    <service android:enabled="true" android:name=".StartNotification" />        
    ...
你还需要考虑你经常重置这些警报。如果您认为在最近的将来,同样的警告可能会再次设置,那么考虑使用<代码>标志< /代码>未决意图。原因是更新现有的挂起意图或使用旧意图,但重置时间等。因此,也要考虑这个问题。

日历对象的代码似乎很好。只需确保(使用日志)通过从字符串获取分钟和小时设置的分钟和小时是正确的。也许您也可以尝试下面的代码来获取您的区域设置特定时间

PendingIntent pendingNotifications = PendingIntent.getService(this, i, notifications, 0);
PendingIntent pendingNotifications = PendingIntent.getService(this, i, notifications, 0);
Calendar calendar = Calendar.getInstance(TimeZone.getDefault());