有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何将意图传递给广播接收器并启动Android服务

Java目标API 30,最小API 19

我有由前台服务中的处理程序线程创建的警报。 我有基于用户输入在处理程序中设置的警报。我可以确认传递给警报的时间是正确的。以下是报警对象类:

public class StartAlarmObject  {
    private String name;
    private Context context;
    private int index;
    private int day;
    private long time;
    private NotificationManagerCompat notificationManager;
    private ArrayList<RestrictionObject> restrictions = new ArrayList<>();
    private ReadAndWriteRestrictions readAndWriteRestrictions = new ReadAndWriteRestrictions();
    private AlarmManager alarmManager;
    private PendingIntent pendingIntent;

    public StartAlarmObject (String name, Context context, int index, int day, long time)
    {
        this.name = name;
        this.context = context;
        this.index = index;
        this.day = day;
        this.time = time;
    }

    public void startAlarm() {
        System.out.println("starting alarm/alarm setting...");
        alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);

        Intent intent = new Intent(context, AlertReceiver.class);
        intent.putExtra("index", index);
        pendingIntent = PendingIntent.getBroadcast(context, (index * 100) + (day * 10), intent, 0);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, time, pendingIntent);
                System.out.println("setting exact and allowing while idle");
            } else {
                alarmManager.setExact(AlarmManager.RTC_WAKEUP, time, pendingIntent);
                System.out.println("setting exact");
                }
        } else {
            alarmManager.set(AlarmManager.RTC_WAKEUP, time, pendingIntent);
            System.out.println("just setting");
        }
    }

    public void cancelAlarm()
    {
        if (alarmManager!= null) {
            alarmManager.cancel(pendingIntent);
        }
    }

    public String getName() {
        return name;
    }
}

我得到了我期望的“设置精确且允许空闲时”println语句,但我从未看到广播接收器类的任何反应,我将意图传递给:

package com.example.gotimejavaversion;

import 安卓.content.BroadcastReceiver;
import 安卓.content.Context;
import 安卓.content.Intent;

public class AlertReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        System.out.println("alert received");
        Intent serviceIntent = new Intent(App.getContext(), TheRestrictor.class);
        serviceIntent.putExtra("caller", "alarm");
        System.out.println("The alarm reached the receiver");
        context.stopService(serviceIntent);
        context.startService(serviceIntent);
    }
}

当警报响起时,我需要什么才能到达广播接收器或重新启动服务? 希望我只是错过了一些简单的东西

谢谢大家!


共 (0) 个答案