首页 > 解决方案 > 想写一个代码只在特定时间发送通知,但不知何故,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());

}

}

有人可以帮我吗?

标签: androidnotificationsalarmmanagerandroid-pendingintent

解决方案


你很困惑。

在您的代码中,您调用NotificationManager.notify(). 这将Notification立即显示。

你做:

Intent intent = new Intent(this, MainActivity.class);
PendingIntent alarmIntent = PendingIntent.getBroadcast(this,0, intent,0);

这行不通。您已经创建了一个PendingIntent将通过广播发送的Intent一个Activity! 你想发生什么?你想要一个Activity被启动还是你想要一个BroadcastReceiver被触发?

我认为你想要做的如下:

  • 创建一个Intentfor a BroadcastReceiver,将其包装在一个PendingIntentusing 中getBroadcast()并将其传递给 the ,AlarmManager以便Intent在将来的某个时间设置广播。
  • 创建一个类extends BroadcastReceiver。在onReceive()创建Notification并调用NotificationManager.notify()发布Notification. 在Notification你可以设置一个PendingIntent打开你的Activity,这样如果用户点击Notification你的Activity就会被启动。为此,请调用PendingIntent.getActivity()并传递一个Intent包含MainActivity.class.

推荐阅读