public void fireAlarm(int Year,int Month,int Day,int Hour,int Min,int Sec)
{
Calendar calendar=Calendar.getInstance();
calendar.set(Year, Month, Day, Hour, Min,Sec);
Intent intent = new Intent(this, AlarmReciver.class);
PendingIntent penintent = PendingIntent.getBroadcast(this.getApplicationContext(),234324,intent,0);
AlarmManager alm = (AlarmManager)getSystemService(ALARM_SERVICE);
alm.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), penintent);
这是BroadcastReciver:
package il.co.galrom;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
public class AlarmReciver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.i("alarm","alarm worked");
}
}
这是我的清单:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="il.co.galrom"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="18" />
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="il.co.galrom.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name="il.co.galrom.AlarmReciver"></receiver>
</application>
</manifest
在LogCat中,我可以看到brodcast正在发生,但OnRecieve()
永远不会被调用
谢谢!
答案 0 :(得分:1)
问题最可能出在这一行
alm.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), penintent);
此处的第二个参数应该是以毫秒为单位的时间,之后警报应该消失。例如,如果你希望它在那一刻发射,那么它应该是0,否则为1000秒,依此类推。
看起来你正在向参数传递一个很大的值(从年,月等参数来判断)。
答案 1 :(得分:1)
代码本身正在发挥作用。
常见的缺陷是压缩月参数为零索引。 如果你想为2月份设置闹钟,你需要将1作为你的月份参数传递给fireAlarm函数