Android 警报在应用程序中不起作用

Android 警报在应用程序中不起作用,android,alarmmanager,alarm,Android,Alarmmanager,Alarm,我试图在用户指定的时间触发警报。所以我有timepickerdialog,用户可以从中选择时间。它向我显示警报设置为指定的时间,但它不工作。下面是代码 这是我的主要活动 Calendar currentTime = Calendar.getInstance(); int hour = currentTime.get(Calendar.HOUR_OF_DAY); int minute = currentTime.get(Calendar.MINUTE); TimePickerDialog time

我试图在用户指定的时间触发警报。所以我有timepickerdialog,用户可以从中选择时间。它向我显示警报设置为指定的时间,但它不工作。下面是代码

这是我的主要活动

Calendar currentTime = Calendar.getInstance();
int hour = currentTime.get(Calendar.HOUR_OF_DAY);
int minute = currentTime.get(Calendar.MINUTE);
TimePickerDialog timePickerDialog = new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
                hours = hourOfDay;
                minutes = minute;

                Calendar calendar = Calendar.getInstance();
                calendar.set(Calendar.HOUR_OF_DAY, hours);
                calendar.set(Calendar.MINUTE, minutes);
                calendar.set(Calendar.SECOND, 0);
                Intent intent1 = new Intent(MainActivity.this, AlarmReceiver.class);
                PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0,intent1, PendingIntent.FLAG_UPDATE_CURRENT);
                AlarmManager am = (AlarmManager) MainActivity.this.getSystemService(MainActivity.this.ALARM_SERVICE);
                am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);

                Toast.makeText(getApplicationContext(), "Alarm has been set for "+hours+":"+minutes,Toast.LENGTH_LONG).show();
            }
        }, hour, minute, false);
        timePickerDialog.setTitle("Select time");
        timePickerDialog.show();
这是我的AlarmReceiver.class

public class AlarmReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {

        Uri alarmRingtone = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
        if(alarmRingtone == null){
            alarmRingtone = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
        }

        Ringtone ringtone = RingtoneManager.getRingtone(context,alarmRingtone);
        ringtone.play();
    }
这是我的AndroidManifest文件

<uses-permission android:name="android.permission.WAKE_LOCK"/>

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

请尝试以下代码,这将是你的工作

/**
     * Method for start Alarm on Every minute
     *
     * @param minutes Minute when you want to start after current time
     * @param context
     */
    public static void startAlarm(Context context, int minutes) {
        Logger.print("AlarmReceiver startAlarm  called");
        Intent alarmIntent = new Intent(context, AlarmReceiver.class);
        alarmIntent.setAction("testAPP");
        PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 123451, alarmIntent, PendingIntent.FLAG_CANCEL_CURRENT);
        AlarmManager manager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        manager.cancel(pendingIntent);
        long alarmPeriodicTime = System.currentTimeMillis() + (minutes*60*1000);
        if (Build.VERSION.SDK_INT >= 23) {
            manager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, alarmPeriodicTime, pendingIntent);
        } else if (Build.VERSION.SDK_INT >= 19) {
            manager.setExact(AlarmManager.RTC_WAKEUP, alarmPeriodicTime, pendingIntent);
        } else {
            manager.set(AlarmManager.RTC_WAKEUP, alarmPeriodicTime, pendingIntent);
        }
    }
在我的听筒里,我又在呼叫同样的电话

 startAlarm(context, Prefs.getLocationUpdateInterval(context));

是否重复?对于重复,请在广播接收器中放入相同的代码,它将起作用WakefulBroadcastReceiverService.class是什么?它与AlarmReceiver类相同吗?另外,我应该在哪里编写此方法-MainActivity或AlarmReceiver类?是的,它是相同的AlarmReceiver。请立即检查。授予权限android.permission.SET\u ALARM