我已经四处寻找并且在我的智慧结束时遇到了Android通知问题。
我正在尝试实施通知,以便在用户从DatePicker
(,例如始终在所选日期的08:00 )选择日期的预定义时间触发
通知可以在我手动触发的同时工作,因此我知道它的代码可以正常工作。
我通过从Calendar
回调中抓取日期来填充我的DatePicker
并且可以记录它以便我知道我使用的日期是正确的,并且我将此转换为毫秒到用于设置闹钟。
如果我选择过去的日期或时间(根据Android的默认操作),通知会立即触发,因此它会将我的日期和时间识别为有效,以便知道它是在过去。
但问题是,如果我在将来设定时间,它就不会触发,而我根本无法解决原因。
这是onDateSet()
方法回调来自DatePicker
我获得年,月和日,然后设置HOUR_OF_DAY
和MINUTE
(目前设置为13:15用于测试目的)...
//Add the chosen date to the DB (for the birthday)
//Callback implemented from DatePickerFragment Class
@Override
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
//Create a new string from the date
String date = String.valueOf(new StringBuilder()
.append(dayOfMonth)
.append("-")
.append(month + 1)
.append("-")
.append(year));
updateDB_Birthday(date);
dbHelper.updateIsOwned(beanieID, 1);
//Convert date set to millis for use with notifying when set
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, month);
calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
calendar.set(Calendar.HOUR_OF_DAY, 13);
calendar.set(Calendar.MINUTE, 15);
calendar.set(Calendar.SECOND, 0);
long myTime = calendar.getTimeInMillis();
Log.v("z! Calendar", "" + calendar.getTime());
//Create Notification to go off on the beanie's birthday
notificationAlarmManager(myTime);
}
...这是我的通知闹钟管理器...
private void notificationAlarmManager(long myTime) {
AlarmManager alarmManager = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
notificationReceiver notificationReceiver = new notificationReceiver();
IntentFilter filter = new IntentFilter("ALARM_ACTION");
registerReceiver(notificationReceiver, filter);
Intent intent = new Intent("ALARM_ACTION");
intent.putExtra("param", "My scheduled action");
PendingIntent operation = PendingIntent.getBroadcast(this, 0, intent, 0);
alarmManager.set(AlarmManager.RTC_WAKEUP, myTime, operation);
}
...这是我的BroadcastReceiver类...
public class notificationReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
android.support.v4.app.NotificationCompat.Builder builder =
new NotificationCompat.Builder(context)
.setSmallIcon(beanieImage)
.setContentTitle("Beanie Notification")
.setContentText("It's " + beanieName + "'s Birthday today!")
.setDefaults(Notification.DEFAULT_ALL);
//Add an intent
Intent notificationIntent = new Intent(context, ItemDetail.class);
notificationIntent.putExtra("EXTRAS_ID", beanieID);
notificationIntent.putExtra("EXTRAS_NAME", beanieName);
notificationIntent.putExtra("EXTRAS_IMAGE", beanieImage);
notificationIntent.putExtra("EXTRAS_BIRTHDAY", beanieBirthday);
notificationIntent.putExtra("EXTRAS_IS_OWNED", isOwned);
//Add pending intent
PendingIntent pendingIntent =
PendingIntent.getActivity(context, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
//Launch activity on click of notification
builder.setContentIntent(pendingIntent);
NotificationManager notificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(001, builder.build());
}
}
我已经被困在这几天了,这是完成这个应用程序所需要的最后一件事,所以任何帮助都会受到很多人的赞赏。
提前致谢,
P.S。 昨天我问了一个类似的问题here,但显然我的问题“没有显示出足够的研究成果”,尽管这是我的研究让我走得这么远。我已经做了很多“家庭作业”,所以请不要认为我轻轻地参加这个论坛,这几乎是最后的要求。
答案 0 :(得分:0)
所以有些如何,我能够找到它为什么不起作用。 这是答案。这个对我有用。 在AndroidManifest.xml中,将以下接收器添加到application元素。
<receiver android:name=".notificationReceiver"
android:enabled="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
或者只是像这样注册
<receiver
android:name=".notificationReceiver"
</receiver>