android - 想写一个代码只在特定时间发送通知,但不知何故,alarmManager 不工作,它显示了一些错误
问题描述
在选定的时间没有发送通知,当我运行我的代码时,直接显示通知并显示错误这是错误消息:E/NotificationManager: notifyAsUser: tag=null, id=12345, user=UserHandle{0} 我以为错误消息是由于Build.VERSION.SDK_INT,但添加后,错误消息仍然存在。
将所有这些放在 onCreate 下:
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 13);
calendar.set(Calendar.MINUTE,9)
;
Intent intent = new Intent ();
intent.setAction("com.example.Broadcast");
PendingIntent contentIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
// PendingIntent alarmIntent = PendingIntent.getBroadcast(this,0, intent,0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, contentIntent);
这是扩展。
public class wakeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
setNotification(context);
}
protected void setNotification(Context context){
PendingIntent contentIntent = PendingIntent.getActivity(context, 0,
new Intent(context, MainActivity.class), 0);
String ChannelId = "12345";
int uniID = 12345;
NotificationCompat.Builder builder = new NotificationCompat.Builder(context,ChannelId )
.setSmallIcon(R.mipmap.ic_launcher_round)
.setContentTitle("Hi")
.setAutoCancel(true)
.setWhen(System.currentTimeMillis())
.setContentText("Please Rate.");
builder.setContentIntent(contentIntent);
// // 向您的设备发送通知 NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
builder.setChannelId("com.myApp");
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel channel = new NotificationChannel(
"com.myApp",
"My App",
NotificationManager.IMPORTANCE_DEFAULT
);
if (manager != null) {
manager.createNotificationChannel(channel);
}
}
manager.notify(uniID, builder.build());
}
}
有人可以帮我吗?
解决方案
你很困惑。
在您的代码中,您调用NotificationManager.notify()
. 这将Notification
立即显示。
你做:
Intent intent = new Intent(this, MainActivity.class);
PendingIntent alarmIntent = PendingIntent.getBroadcast(this,0, intent,0);
这行不通。您已经创建了一个PendingIntent
将通过广播发送的Intent
一个Activity
! 你想发生什么?你想要一个Activity
被启动还是你想要一个BroadcastReceiver
被触发?
我认为你想要做的如下:
- 创建一个
Intent
for aBroadcastReceiver
,将其包装在一个PendingIntent
using 中getBroadcast()
并将其传递给 the ,AlarmManager
以便Intent
在将来的某个时间设置广播。 - 创建一个类
extends BroadcastReceiver
。在onReceive()
创建Notification
并调用NotificationManager.notify()
发布Notification
. 在Notification
你可以设置一个PendingIntent
打开你的Activity
,这样如果用户点击Notification
你的Activity
就会被启动。为此,请调用PendingIntent.getActivity()
并传递一个Intent
包含MainActivity.class
.
推荐阅读
- for-loop - 如何更正代码以使循环在数据匹配时停止
- c# - Odata $expand 不适用于特定查询
- python - 如何制作一个按位置替换熊猫数据框元素的循环
- html - IE 11 和 JAWS for role="presentation" 在尝试读取表格时的兼容性问题?
- java - Libgdx 在actor中处理输入
- asp.net - 当 IDENTITY_INSERT 设置为 OFF 时,无法在表“表”中插入标识列的显式值,但可以在 db 上手动插入
- javascript - 基本的一条消息骰子滚轮?
- firebase - react-native-firebase 包是否处理“长时间设置计时器是性能和正确性问题”警告?
- firebase - Firebase 函数返回错误的时间
- python - Flask_SQLAlchemy 读取新数据库