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