在Fragment中使用AlarmManager和BroadcastReceiver设置重复报警时遇到真实的问题。在Activity中使用以下代码时没有问题。当移动到Fragment时,BroadcastReceiver从不调用onReceive。
片段:
public void startAlarm(View view) {
Log.i(TAG, "startAlarm");
mAlarmMgr = (AlarmManager) getActivity().getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(getActivity(), AlarmReceiver.class);
mAlarmIntent = PendingIntent.getBroadcast(getActivity(), 0, intent, 0);
mAlarmMgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime(),
60 * 1000,
mAlarmIntent);
}
public void cancelAlarm(View view) {
Log.i(TAG, "cancelAlarm");
// If the alarm has been set, cancel it.
if (mAlarmMgr!= null) {
mAlarmMgr.cancel(mAlarmIntent);
}
}
报警:
public class AlarmReceiver extends BroadcastReceiver {
private static final String TAG = AlarmReceiver.class.getName();
@Override
public void onReceive(Context context, Intent intent) {
Log.i(TAG, "onReceive");
// For our recurring task, we'll just display a message
Toast.makeText(context, "I'm running", Toast.LENGTH_SHORT).show();
}}
清单:
<receiver android:name=".alarms.AlarmReceiver">
</receiver>
我只是好奇,我到底哪里做错了?我在想,也许我没有在清单中正确地登记记忆传承人。
谢谢
3条答案
按热度按时间bbmckpt71#
试试这个,开始报警
取消报警
qnyhuwrf2#
将接收方定义更改为以下内容
请确保您正在调用
startAlarm(View view)
以初始化警报。7z5jn7bk3#
你可能想要的是这样的
这里的主要区别是使用
AlarmManager.RTC_WAKEUP
与AlarmManager.ELAPSED_REALTIME_WAKEUP
。有一件事你应该注意在5. 0+的最小间隔为一个报警是5分钟。