接收器未被 AlarmManager 调用 - Android

Receiver is not being called by AlarmManager - Android

我写了这个 class 每 24 小时调用一次 reciver

我试图为 "SabahReceiver" 使用相同的接收器然后我添加了另一个接收器 "MasaReceiver",所有的可能性都不适合我!

谁能告诉我怎么了!?

import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

import com.mbh.test.receivers.MasaReciever;
import com.mbh.test.receivers.SabahReciever;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * Created by MBH on 17/12/15.
 */
public class SabahMasaAlarmManager {
    public static final int MINUTE = 60000;
    public static final int HOUR = 1000 * 60 * 60;
    public static final int DAY = 86400000;

    private PendingIntent mSabahPendingIntent;
    private PendingIntent mMasaPendingIntent;
    private Context mContext;

    private void SetupAlarms() {
        /* Retrieve a PendingIntent that will perform a broadcast */
        Intent sabahAlarm = new Intent(mContext, SabahReciever.class);
//        sabahAlarm.putExtra(SabahReciever.KEY_IS_SABAH, true);
        mSabahPendingIntent = PendingIntent.getBroadcast(mContext, 100, sabahAlarm, 0);

        /* Retrieve a PendingIntent that will perform a broadcast */
        Intent masaAlarm = new Intent(mContext, MasaReciever.class);
//        sabahAlarm.putExtra(SabahReciever.KEY_IS_SABAH, false);
        mMasaPendingIntent = PendingIntent.getBroadcast(mContext, 101, masaAlarm, 0);
    }

    public void StartAlarm() {

        SimpleDateFormat dateFormat = new SimpleDateFormat(
                "yyyy-MM-dd HH:mm:ss" );

        Date now = Calendar.getInstance().getTime();

        Calendar sabahDate = Calendar.getInstance();
        sabahDate.set(Calendar.HOUR_OF_DAY, 23);
        sabahDate.set(Calendar.MINUTE, 47);
        sabahDate.set(Calendar.SECOND, 0);
//        sabahDate.set(Calendar.HOUR_OF_DAY, 6);
//        sabahDate.set(Calendar.MINUTE, 0);
        if(sabahDate.getTime().before(now)){
            sabahDate.add(Calendar.DAY_OF_YEAR, 1);
        }

        Log.d("DATE", "Sabah: "+ dateFormat.format(sabahDate.getTime()));

        Calendar masaDate = Calendar.getInstance();
        masaDate.set(Calendar.HOUR_OF_DAY, 23);
        masaDate.set(Calendar.MINUTE, 49);
//        masaDate.set(Calendar.HOUR_OF_DAY, 20);
//        masaDate.set(Calendar.MINUTE, 0);
        masaDate.set(Calendar.SECOND, 0);
        if(masaDate.getTime().before(now)){
            masaDate.add(Calendar.DAY_OF_YEAR, 1);
        }


        Log.d("DATE", "Masa: "+ dateFormat.format(masaDate.getTime()));

        AlarmManager manager = (AlarmManager) mContext.getApplicationContext().getSystemService(Context.ALARM_SERVICE);

        manager.setInexactRepeating(AlarmManager.RTC_WAKEUP, sabahDate.getTimeInMillis(), DAY, mSabahPendingIntent);
//        manager.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+10000, 86400000, mSabahPendingIntent);

        manager.setInexactRepeating(AlarmManager.RTC_WAKEUP, masaDate.getTimeInMillis(), DAY, mMasaPendingIntent);
//        manager.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+20000, 86400000, mMasaPendingIntent);
    }

    public void cancelAlarm() {
        AlarmManager managerSabah = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
        managerSabah.cancel(mSabahPendingIntent);

        AlarmManager managerMasa = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
        managerMasa.cancel(mMasaPendingIntent);
    }

    public SabahMasaAlarmManager(Context baseContext) {
        mContext = baseContext;
        SetupAlarms();
    }
}

setInexactRepeating() 不一定会在提到的时间后触发警报。可能会有一些延迟,或者它可能会提前触发。基本上框架 'batch' 一次触发所有不精确的警报。使用 setExact. Also consider the deep sleep mode. See 。由于您希望闹钟每 24 小时触发一次,因此当闹钟触发时设备很有可能处于睡眠模式。