Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.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
Java 广播接收机不';第二次不工作了_Java_Android_Broadcastreceiver - Fatal编程技术网

Java 广播接收机不';第二次不工作了

Java 广播接收机不';第二次不工作了,java,android,broadcastreceiver,Java,Android,Broadcastreceiver,我正在尝试使用AlarmManager计划通知,当我计划一个通知时,它可以完美地工作,但当我计划两个通知时,第一个通知可以,但第二个通知不起作用 我发现几分钟后打开应用程序会通知第二个通知。我想我的收音机出毛病了 MainActivity.java Intent intent = new Intent(context,NotificationClass.class); intent.putExtra("notification_id", id); PendingIntent pendingInt

我正在尝试使用
AlarmManager
计划通知,当我计划一个通知时,它可以完美地工作,但当我计划两个通知时,第一个通知可以,但第二个通知不起作用

我发现几分钟后打开应用程序会通知第二个通知。我想我的收音机出毛病了

MainActivity.java

Intent intent = new Intent(context,NotificationClass.class);
intent.putExtra("notification_id", id);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context,id,intent,PendingIntent.FLAG_UPDATE_CURRENT);
alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),pendingIntent);
public class NotificationClass extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        int id = intent.getIntExtra("notification_id",0);
        NotificationCompat.Builder builder = new NotificationCompat.Builder(context,"1")
            .setContentTitle("Notification")
            .setContentText("Content")
            .setSmallIcon(R.drawable.notif_ic);

        Notification notification = builder.build();
        NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context);

        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
            NotificationChannel channel = new NotificationChannel("1","test", NotificationManager.IMPORTANCE_HIGH);
            notificationManager.createNotificationChannel(channel);
        }
        notificationManager.notify(id,notification);
}
Notification.java

Intent intent = new Intent(context,NotificationClass.class);
intent.putExtra("notification_id", id);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context,id,intent,PendingIntent.FLAG_UPDATE_CURRENT);
alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),pendingIntent);
public class NotificationClass extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        int id = intent.getIntExtra("notification_id",0);
        NotificationCompat.Builder builder = new NotificationCompat.Builder(context,"1")
            .setContentTitle("Notification")
            .setContentText("Content")
            .setSmallIcon(R.drawable.notif_ic);

        Notification notification = builder.build();
        NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context);

        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
            NotificationChannel channel = new NotificationChannel("1","test", NotificationManager.IMPORTANCE_HIGH);
            notificationManager.createNotificationChannel(channel);
        }
        notificationManager.notify(id,notification);
}
AndroidManifest.xml

<receiver android:name=".NotificationClass" ></receiver> 


我不知道我的代码出了什么问题。有人能帮我吗?

首先,确保每次创建通知时通知Id都不同

其次,您错过了清单中标记接收中的标记意图过滤器。请检查这个


希望这有帮助

接收数据的广播接收器:

private BroadcastReceiver mReceiver = new BroadcastReceiver() {

    @Override
    public void onReceive(Context context, Intent intent) {
        String alertMessage = intent.getStringExtra("type");

        doNotificationAlertWorkHere(alertMessage);
    }
};
注册和取消注册您的广播,以避免静态泄漏

通过Android清单文件。(静态)

发送广播,如:

// public static final String ACTION = "ALERT";

Intent intent = new Intent(Constants.ACTION);
intent.putExtra("type", "SUP BRO. Stay Inside");
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);

知识提示:-广播接收器就像一门大炮,要获得命中,你必须确定发射什么(如msg),在哪里发射(如活动)。装载和卸载加农炮以获得另一次命中。(例如,注册和注销)

我已经试过了,它正在工作。在onReceive中添加通知代码

广播接收机

class AlarmReceiver : BroadcastReceiver() {

override fun onReceive(context: Context, intent: Intent) {

 /*
  Your implementation

   */
 }
}
主要节日

    <receiver
        android:name=".AlarmReceiver"
        android:exported="true"
        android:enabled="true" />

id
的值是多少?@Yupi每次我安排通知时,它都是不同的。我没有发现任何明显的错误。你应该在你的
BroadcastReceiver
中添加一些日志记录,看看它是否被触发,以及“额外”是否具有你期望的值。你能添加触发这两个通知的代码吗?可能与瞌睡模式限制有关-嗨,谢谢你的回答,正如我在评论中所说的,每次id都不同,如果不是的话,第二个通知会被通知,对于第二个,我错过了什么意图过滤器?您能帮忙吗?@Daniel上面链接中的示例:
标记意图过滤器,先生。我认为
AlarmManager
不需要意图过滤器,但您尝试过这个吗?不,您建议使用哪个意图过滤器?
val alarmManager = activity.getSystemService(Activity.ALARM_SERVICE) as AlarmManager
        val alarmIntent = Intent(activity.applicationContext, AlarmReceiver::class.java) // AlarmReceiver1 = broadcast receiver

        val calendar = Calendar.getInstance()
        calendar.timeInMillis = timeInMilliSeconds

        val pendingIntent = PendingIntent.getBroadcast(activity, timeInMilliSeconds.toInt(), alarmIntent, PendingIntent.FLAG_CANCEL_CURRENT)
        alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.timeInMillis, pendingIntent)