我正在尝试实现警报,因此我的应用程序有 2 个活动:主要活动(用户设置警报的地方)和实际触发警报时显示的“响铃”活动。以下是我如何发送一个意图让 AlarmManager 调用“响铃”窗口:
public void scheduleAlarm(View view) {
Intent intent = new Intent(this, WakeUp.class);
intent.setAction(Intent.ACTION_VIEW);
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
PendingIntent wakeUp = PendingIntent.getActivity(this, 123, intent, 0);
AlarmManager alarmManager = (AlarmManager) this.getSystemService(this.ALARM_SERVICE);
alarmManager.setExact(AlarmManager.RTC_WAKEUP, calculateMillis(), wakeUp); // setExact is pretty much made for setting alarms anyway
}
private long calculateMillis() {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR, hour);
cal.set(Calendar.MINUTE, minute);
cal.set(Calendar.SECOND, 0);
return cal.getTimeInMillis() - Calendar.getInstance().getTimeInMillis();
}
在我的清单中,我有以下内容:
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".WakeUpWithMath"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".WakeUp"
android:configChanges="orientation|keyboardHidden|screenSize"
android:label="@string/title_activity_wake_up"
android:theme="@style/FullscreenTheme" >
<intent-filter>
<action android:name="android.intent.action.VIEW" />
</intent-filter>
</activity>
</application>
我已经对它进行了多次测试,并且使用不同的 calculateMillis 值(甚至模拟返回 30000)但结果始终相同:在调用alarmManager.setExact
它之后立即显示“响铃”活动,并且不等待时间过去。
我错过了什么?清单配置错了吗?我需要使用<receiver>
标签吗?如果是这样,我应该如何配置它?