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

时间:2017-04-28 13:09:31

标签: android alarmmanager

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

我实施它但在适当的时间段内不起作用。有时候它会打两次电话,有时候不会在间隔时间打电话。

我使用 RTC RTC_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...");
            }
        });
    }
}

AlarmBroadCastReceiver.java

public class TestBroadCastReceiver extends BroadcastReceiver {

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

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

    }
}

日志

enter image description here

1 个答案:

答案 0 :(得分:3)

文档https://developer.android.com/reference/android/app/AlarmManager.html有一个BroadcastReceiver示例,它侦听设备唤醒。 从该接收器开始服务并在其中安排下一个警报。 我已经使用SharedPreferences存储下一个闹钟时间并启动相同的服务来处理警报并在设备启动后通过在start Intent中传递不同的键来安排新的警报。 正如文档所说,如果RTC被阻止,RTC将不会唤醒你,但RTC_WAKEUP会。