android - 我创建的本地通知正在立即发送,而不是在我希望发送的日期
问题描述
我开始了 bradcastreceiver 和服务。我创建的本地通知会立即发送,而不是在我希望发送的日期。示例:我为 18:30 创建了闹钟,现在时间是 18:00。通知已在 18:00 发送。我无法解决问题。请帮忙。谢谢你 。
任务活动.java
private void registerMyAlarmBroadcast() {
myBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
LocalDate now = LocalDate.now().plusDays(1);
String date=utilityMethods.convertDate(now.toString());
Intent dailyUpdater = new Intent(TasksActivity.this, MyService.class);
dailyUpdater.putExtra("now",date);
startService(dailyUpdater);
}
};
registerReceiver(myBroadcastReceiver, new IntentFilter("com.devopergirl.dts"));
myPendingIntent = PendingIntent.getBroadcast(this, 0, new Intent("com.devopergirl.dts"), 0);
alarmManager = (AlarmManager) (this.getSystemService(Context.ALARM_SERVICE));
}
我的服务.java
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i(TAG, "ON START COMMAND ÇAĞRILDI " + Thread.currentThread().getName() + " THREAD UZERINDE ÇALIŞIYOR");
/* databaseAccess.open();
list = databaseAccess.getTaskList(utilityMethods.getFileNo());
databaseAccess.close();*/
//String nowDate = intent.getStringExtra("now");
for (Task task : list) {
StringTokenizer tokens = new StringTokenizer(task.getStartDate(), "/");
String day = tokens.nextToken();// this will contain "Fruit"
String month = tokens.nextToken();//
String year = tokens.nextToken();
StringTokenizer time = new StringTokenizer(task.getStartTime(), ":");
String minute = time.nextToken();
String hour = time.nextToken();
Calendar calender = Calendar.getInstance(Locale.getDefault());
calender.clear();
int monthNew = Integer.parseInt(month) - 1;
calender.set(Calendar.MONTH, monthNew);
calender.set(Calendar.DAY_OF_MONTH, Integer.parseInt(day));
calender.set(Calendar.YEAR, Integer.parseInt(year));
calender.set(Calendar.HOUR, Integer.parseInt(hour));
calender.set(Calendar.MINUTE, Integer.parseInt(minute));
calender.set(Calendar.SECOND, 0);
TimeZone tz = calender.getTimeZone();
String dkd = tz.getDisplayName();
long calMills = calender.getTimeInMillis();
String alertTitle = task.getCategoryName();
String alertContent = task.getStartTime() + " " + task.getEndTime();
Intent myIntent = new Intent(MyService.this,
NotificationManager2.class);
myIntent.putExtra(context.getString(R.string.alert_title), alertTitle);
myIntent.putExtra(context.getString(R.string.alert_content), alertContent);
PendingIntent pendingIntent = PendingIntent.getBroadcast(MyService.this
.getApplication(), 0, myIntent, PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager alarmMgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
assert alarmMgr != null;
alarmMgr.set(AlarmManager.RTC_WAKEUP, calender.getTimeInMillis(), pendingIntent);
System.out.println(calender.getTimeInMillis());
}
}
}
return START_STICKY;
}
NotificationManager2.java:
@Override
public void onReceive(Context context, Intent intent) {
String Title = intent.getStringExtra(context.getString(R.string.titttle));
String content = intent.getStringExtra(context.getString(R.string.alert_content));
NotificationCompat.Builder builder =
new NotificationCompat.Builder(context)
.setSmallIcon(R.drawable.ic_action_alarms)
.setContentTitle(Title)
.setContentText(content).setSound(Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE
+ "://" + context.getPackageName() + "/raw/notify"));
// Add as notification
android.app.NotificationManager manager = (android.app.NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
manager.notify(0, builder.build());
}
解决方案
推荐阅读
- java - 如果从最近删除应用程序,接收器不会被调用
- opencv - 如何使用来自独立函数的数据返回 cv::Mat
- java - 如何解决Eclipse中项目的“找不到源”
- python - 如何从 pickle 文件列表中创建多个 Pandas 数据框?
- asp.net - 如何将具有 TextMode="Date" 的 TextBox 重置为默认值?
- java - 大写和小写的 Switch 中的字符串
- symfony - 教义传承众子
- spring-data-jpa - JPQL 按使用连接表的 OneToMany 关系进行过滤
- sql - 提取重复出现的 blob 数据并放入另一个表的最佳方法是什么?- SQL
- javascript - Flexbox - 基于特定列高度的流体网格