在使用来自片段内的AlarmManager和BroadcastReceiver设置重复报警时存在实际问题。以下代码在活动中没有问题。移动到片段时,BroadcastReceiver从不会调用onReceive。Android设置来自片段的报警
片段:
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>
只是好奇,我可能去错了吗?我在想,也许我没有在Manifest中正确注册Receiver。
感谢
'receiver'元素'启用= TRUE;默认情况下,所以这是多余的。除非您打算让设备上的其他应用程序调用您的接收器,否则您不应该导出您的'BroadcastReceiver'。 – JBirdVegas
谢谢。我已经尝试了这个以及使用android:name的完整软件包名称。仍然没有运气。 – dragnet