Android 设备关闭时报警管理器不工作

Android 设备关闭时报警管理器不工作,android,alarmmanager,Android,Alarmmanager,我希望在给定的时间间隔内继续运行报警管理器 我实现了它,但没有在适当的时间段内工作。有时它会呼叫两次,有时在间隔时间不呼叫 我使用了RTC和RTC_WAKEUP,我也想知道这个字段的含义是什么 MainActivity.java public class MainActivity extends AppCompatActivity { Context mContext; @Override protected void onCreate(Bundle savedIns

我希望在给定的时间间隔内继续运行报警管理器

我实现了它,但没有在适当的时间段内工作。有时它会呼叫两次,有时在间隔时间不呼叫

我使用了RTCRTC_WAKEUP,我也想知道这个字段的含义是什么

MainActivity.java

public class MainActivity extends AppCompatActivity {

    Context mContext;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mContext = getApplicationContext();

        Intent intent = new Intent(this, TestBroadCastReceiver.class);
        final PendingIntent pi = PendingIntent.getBroadcast(mContext, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
        final AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);

        ((Button) findViewById(R.id.activity_main_start)).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                alarmManager.setRepeating(AlarmManager.RTC, System.currentTimeMillis(), 2000*60, pi);
                Log.d("ALARM MANAGER", "Start Alarm Manager... At " + new Date());
            }
        });

        ((Button) findViewById(R.id.activity_main_stop)).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
                alarmManager.cancel(pi);
                Log.d("ALARM MANAGER", "Stop Alarm Manager...");
            }
        });
    }
}
public class TestBroadCastReceiver extends BroadcastReceiver {

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

        Log.e("ALARM MANAGER", "BROADCAST RECEIVER : " + new Date());

    }
}
AlarmBroadCastReceiver.java

public class MainActivity extends AppCompatActivity {

    Context mContext;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mContext = getApplicationContext();

        Intent intent = new Intent(this, TestBroadCastReceiver.class);
        final PendingIntent pi = PendingIntent.getBroadcast(mContext, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
        final AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);

        ((Button) findViewById(R.id.activity_main_start)).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                alarmManager.setRepeating(AlarmManager.RTC, System.currentTimeMillis(), 2000*60, pi);
                Log.d("ALARM MANAGER", "Start Alarm Manager... At " + new Date());
            }
        });

        ((Button) findViewById(R.id.activity_main_stop)).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
                alarmManager.cancel(pi);
                Log.d("ALARM MANAGER", "Stop Alarm Manager...");
            }
        });
    }
}
public class TestBroadCastReceiver extends BroadcastReceiver {

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

        Log.e("ALARM MANAGER", "BROADCAST RECEIVER : " + new Date());

    }
}
日志

文档中有一个BroadcastReceiver示例,用于侦听设备唤醒。 从该接收器启动服务,并在其中安排下一个警报。 我使用SharedReferences来存储下一次报警时间,并通过在start Intent中传递不同的键来启动相同的服务,以便在设备启动后处理报警和安排新的报警。
正如文档所述,如果手机被阻止,RTC不会唤醒您的手机,但RTC_WAKEUP会。

谢谢您的回答,但我想继续我的Alarm Manager设备处于睡眠或运行模式,直到用户不停止它。Alarm Manager正在睡眠模式下运行-这就是为什么有RTC_WAKEUP-此标志允许唤醒手机。如果设备关闭,所有报警都将被取消。是的,我知道在设备关闭时取消所有报警,但为什么我们使用RTC,RTC_EAKEUP这种类型的常量。这两种类型的常量之间的区别是设备处于睡眠模式时的行为-RTC_唤醒将唤醒设备,但RTC不会。RTC将在设备解锁后触发。