使用 broadcastReceiver 在独特的时间发出独特的通知

Unique Notifications at Unique Times with broadcastReceiver

我目前正在开发小应用程序,但我很难发送通知。

我的目标:我有不同的任务,他们需要在独特的时间向用户发送独特的通知,甚至 当应用程序关闭时。

我做了什么?:我确实创建了不同的 broadCastReceiver,使它们与 alarmManager 的,但即使我更改了请求代码、标志或频道代码,我也会收到通知 同时,如果用户为多个任务启用通知,但为通知启用 alarmManagers 不应该在同一时间后工作。

'receiver' AndroidManifest.xml 的一部分

<receiver
            android:name=".BroadcastReceiver"
            android:exported="true">
            <intent-filter>
                <action
                    android:name="pendingIntent">
                </action>
            </intent-filter>
        </receiver>

        <receiver
            android:name=".BroadcastReceiver2"
            android:exported="true">
            <intent-filter>
                <action
                    android:name="pendingIntent2">
                </action>
            </intent-filter>
        </receiver>

第一个和第二个 broadCastReceiver

public class BroadcastReceiver extends android.content.BroadcastReceiver
{
    @Override
    public void onReceive(Context context, Intent intent)
    {
        {
            NotificationCompat.Builder builder = new NotificationCompat.Builder(context, "100")
                    .setSmallIcon(R.drawable.logologo)
                    .setContentTitle("Title")
                    .setContentText("Text")
                    .setPriority(NotificationCompat.PRIORITY_HIGH);

            NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context);
            notificationManager.notify(100, builder.build());
        }
    }
}

public class BroadcastReceiver2 extends BroadcastReceiver
{
    @Override
    public void onReceive(Context context, Intent intent)
    {
        NotificationCompat.Builder builder = new NotificationCompat.Builder(context,"102")
                .setSmallIcon(R.drawable.logologo)
                .setContentTitle("Title")
                .setContentText("Text")
                .setPriority(NotificationCompat.PRIORITY_HIGH);

        NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context);
        notificationManager.notify(102, builder.build());
    }
}

第一和第二频道

public void createChannel1()
    {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
        {
            CharSequence name = "channel1";
            String description = "channel1 description";

            int importance = NotificationManager.IMPORTANCE_HIGH;
            NotificationChannel channel1 = new NotificationChannel("100", name, importance);
            channel1.setDescription(description);

            NotificationManager notificationManager = getSystemService(NotificationManager.class);
            notificationManager.createNotificationChannel(channel1);
        }
    }

  public void createChannel2()
    {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
        {
            CharSequence name = "channel2";
            String description = "channel2 description";

            int importance = NotificationManager.IMPORTANCE_HIGH;

            NotificationChannel channel2 = new NotificationChannel("102", name,importance);
            channel2.setDescription(description);

            NotificationManager notificationManager = getSystemService(NotificationManager.class);
            notificationManager.createNotificationChannel(channel2);
        }
    }

Activity 需要从 Channel1 上的第一个 broadCastReceiver 发送通知,并且 Activity 需要从 Channel2 上的第二个 broadCastReceiver 发送通知

 button30.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                Intent intent = new Intent(SmokeActivity.this, BroadcastReceiver.class);
                PendingIntent pendingIntent = PendingIntent.getBroadcast(SmokeActivity.this, 100, intent, 0);

                AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);

                // Set the alarm to start at 8:30 a.m.
                Calendar calendar = Calendar.getInstance();
                calendar.setTimeInMillis(System.currentTimeMillis());
                calendar.set(Calendar.HOUR_OF_DAY, 8);
                calendar.set(Calendar.MINUTE, 30);

                alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
                        1000 * 60, pendingIntent);
            }
        });

 button29.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                Toast.makeText(WaterActivity.this, "Notifications Set", Toast.LENGTH_SHORT).show();

                Intent intent2 = new Intent(WaterActivity.this, BroadcastReceiver2.class);
                PendingIntent pendingIntent2 = PendingIntent.getBroadcast(WaterActivity.this,0,intent2,0);

                AlarmManager alarmManager2 = (AlarmManager)getSystemService(ALARM_SERVICE);

                // Set the alarm to start at 8:30 a.m.
                Calendar calendar2 = Calendar.getInstance();
                calendar2.setTimeInMillis(System.currentTimeMillis());
                calendar2.set(Calendar.HOUR_OF_DAY, 8);
                calendar2.set(Calendar.MINUTE, 30);

                alarmManager2.setRepeating(AlarmManager.RTC_WAKEUP, calendar2.getTimeInMillis(),
                        1000*45, pendingIntent2);
            }
        });

对于遇到同样问题的任何人,问题是 android 系统不允许我们在您创建通知后的前 10 分钟后发送通知。