我的 AlarmManager 没有被调用
My AlarmManager not getting called
我尝试了从 Whosebug 或任何地方获得的所有代码,但在 AlarmManager
中没有成功,我的 BroadcastReceiver
甚至没有被调用。这是我的代码:
//My AlarmManager is in MyDB.Class extends SQLiteOpenHelper{
System.out.println("Inside AlarmManager");
// Create alarm manager
AlarmManager alarmMgr0 = (AlarmManager) mContext
.getSystemService(Context.ALARM_SERVICE);
System.out.println("Inside alarmMgr0 " + alarmMgr0);
// Create pending intent & register it to your alarm notifier
// class
Intent intent0 = new Intent(mContext, AlarmReciever.class);
intent0.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent0.putExtra("req_code", v); // pI);
PendingIntent pendingIntent0 = PendingIntent.getBroadcast(
mContext, v, intent0, 0);
System.out.println("Inside pendingIntent0 "
+ pendingIntent0);
// set timer you want alarm to work
Calendar timeOff9 = Calendar.getInstance();
timeOff9.add(Calendar.DAY_OF_YEAR, scheduleDao1.getMeetingDay());
System.out.println("Inside if getDay "
+ scheduleDao1.getDay());
timeOff9.set(Calendar.MONTH, scheduleDao1.getMeetingMonth());
System.out.println("Inside if getMonth "
+ scheduleDao1.getMonth());
timeOff9.set(Calendar.YEAR, scheduleDao1.getMeetingYear());
System.out.println("Inside if getYear "
+ scheduleDao1.getYear());
if (scheduleDao1.getFromTimeHr() != 00) {
System.out.println("Inside if getFromTimeHr "
+ (scheduleDao1.getFromTimeHr() - 1));
timeOff9.set(Calendar.HOUR_OF_DAY,
scheduleDao1.getFromTimeHr() - 1);
}
timeOff9.set(Calendar.MINUTE,
scheduleDao1.getFromTimeMin());
System.out.println("Inside getMeetingFromTimeMin "
+ scheduleDao1.getFromTimeMin());
timeOff9.set(Calendar.SECOND, 0);
// set that timer as a RTC Wakeup to alarm manager object
alarmMgr0.set(AlarmManager.RTC_WAKEUP,
timeOff9.getTimeInMillis(), pendingIntent0);
contents.put(ALARM_REQUEST_CODE, v);
//}
我的接收器 class 在这里(甚至没有被调用)
public class AlarmReciever extends BroadcastReceiver {
Context mContext;
int request_code = 0;
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
mContext = context;
System.out.println("Inside onReceive");
mContext = context;
request_code = intent.getIntExtra("req_code", 0);
System.out.println("Inside request_code " + request_code);
// Bundle extras = intent.getExtras();
// request_code = extras.getInt("req_code");
// System.out.println("Inside request_code " + request_code);
}
}
我的清单代码就是这样....
.
.
.
<receiver android:name=".AlarmReciever"
android:enabled="true"/>
</application>
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
我不明白这些代码出了什么问题,请有人帮助我。
试试下面的代码:
final static int RQS_1 = 1;
public void setAlarm1(long interval){
/* info.setText("\n\n***\n"
+ "Alarm1 is set@ " + targetCal.getTime() + "\n"
+ "***\n");*/
Intent intent = new Intent(getBaseContext(), AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(),RQS_1, intent, 0);
AlarmManager alarmManager1 = ((ApplicationConstant)ListOfAds.this.getApplication()).getmanager();
alarmManager1 = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
//alarmManager.set(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(), pendingIntent);
alarmManager1.setRepeating(AlarmManager.RTC_WAKEUP,interval, 60000, pendingIntent);
System.out.println("Alarm fired ListofAds:"+System.currentTimeMillis());
}
AlarmReceiver.java
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "Alarm received!", Toast.LENGTH_LONG).show();
}
Manifest.xml
<receiver
android:name="yourpackagename.AlarmReceiver"
android:enabled="true"
android:permission="android.permission.RECEIVE_BOOT_COMPLETED"
android:process=":remote" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
权限:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
尝试上面的方法code.I确保警报管理器会被调用。
在@kgandroid 和@rainash 的帮助下,我终于得到了我想要的东西
在这里,我 post 我现在解决代码。这对我来说工作正常并显示通知。
而且我还可以在这里设置 Multiple AlarmManager 我需要的时间。
// Create alarm manager
AlarmManager alarmMgr0 = (AlarmManager) mContext
.getSystemService(Context.ALARM_SERVICE);
// Create pending intent & register it to your alarm notifier
// class
Intent intent0 = new Intent("alarm");
intent0.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent0.putExtra("req_code", v); // pI);
PendingIntent pendingIntent0 = PendingIntent
.getBroadcast(mContext, v, intent0,
PendingIntent.FLAG_UPDATE_CURRENT);
// set timer you want alarm to work
Calendar timeOff9 = Calendar.getInstance();
timeOff9.setTimeInMillis(System.currentTimeMillis());
timeOff9.set(scheduleDao1.getYear(),
(scheduleDao1.getMonth()) - 1, //Months start from '0'
scheduleDao1.getDay(),
(scheduleDao1.getFromTimeHr()) - 1,//I want those notification before 1hr
scheduleDao1.getFromTimeMin(), 0);
// long dateWeGet = Long.valueOf(dateString);
// set that timer as a RTC Wakeup to alarm manager object
alarmMgr0.set(AlarmManager.RTC_WAKEUP,
timeOff9.getTimeInMillis(), pendingIntent0);
contents.put(ALARM_REQUEST_CODE, v);
我尝试了从 Whosebug 或任何地方获得的所有代码,但在 AlarmManager
中没有成功,我的 BroadcastReceiver
甚至没有被调用。这是我的代码:
//My AlarmManager is in MyDB.Class extends SQLiteOpenHelper{
System.out.println("Inside AlarmManager");
// Create alarm manager
AlarmManager alarmMgr0 = (AlarmManager) mContext
.getSystemService(Context.ALARM_SERVICE);
System.out.println("Inside alarmMgr0 " + alarmMgr0);
// Create pending intent & register it to your alarm notifier
// class
Intent intent0 = new Intent(mContext, AlarmReciever.class);
intent0.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent0.putExtra("req_code", v); // pI);
PendingIntent pendingIntent0 = PendingIntent.getBroadcast(
mContext, v, intent0, 0);
System.out.println("Inside pendingIntent0 "
+ pendingIntent0);
// set timer you want alarm to work
Calendar timeOff9 = Calendar.getInstance();
timeOff9.add(Calendar.DAY_OF_YEAR, scheduleDao1.getMeetingDay());
System.out.println("Inside if getDay "
+ scheduleDao1.getDay());
timeOff9.set(Calendar.MONTH, scheduleDao1.getMeetingMonth());
System.out.println("Inside if getMonth "
+ scheduleDao1.getMonth());
timeOff9.set(Calendar.YEAR, scheduleDao1.getMeetingYear());
System.out.println("Inside if getYear "
+ scheduleDao1.getYear());
if (scheduleDao1.getFromTimeHr() != 00) {
System.out.println("Inside if getFromTimeHr "
+ (scheduleDao1.getFromTimeHr() - 1));
timeOff9.set(Calendar.HOUR_OF_DAY,
scheduleDao1.getFromTimeHr() - 1);
}
timeOff9.set(Calendar.MINUTE,
scheduleDao1.getFromTimeMin());
System.out.println("Inside getMeetingFromTimeMin "
+ scheduleDao1.getFromTimeMin());
timeOff9.set(Calendar.SECOND, 0);
// set that timer as a RTC Wakeup to alarm manager object
alarmMgr0.set(AlarmManager.RTC_WAKEUP,
timeOff9.getTimeInMillis(), pendingIntent0);
contents.put(ALARM_REQUEST_CODE, v);
//}
我的接收器 class 在这里(甚至没有被调用)
public class AlarmReciever extends BroadcastReceiver {
Context mContext;
int request_code = 0;
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
mContext = context;
System.out.println("Inside onReceive");
mContext = context;
request_code = intent.getIntExtra("req_code", 0);
System.out.println("Inside request_code " + request_code);
// Bundle extras = intent.getExtras();
// request_code = extras.getInt("req_code");
// System.out.println("Inside request_code " + request_code);
}
}
我的清单代码就是这样....
.
.
.
<receiver android:name=".AlarmReciever"
android:enabled="true"/>
</application>
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
我不明白这些代码出了什么问题,请有人帮助我。
试试下面的代码:
final static int RQS_1 = 1;
public void setAlarm1(long interval){
/* info.setText("\n\n***\n"
+ "Alarm1 is set@ " + targetCal.getTime() + "\n"
+ "***\n");*/
Intent intent = new Intent(getBaseContext(), AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(),RQS_1, intent, 0);
AlarmManager alarmManager1 = ((ApplicationConstant)ListOfAds.this.getApplication()).getmanager();
alarmManager1 = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
//alarmManager.set(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(), pendingIntent);
alarmManager1.setRepeating(AlarmManager.RTC_WAKEUP,interval, 60000, pendingIntent);
System.out.println("Alarm fired ListofAds:"+System.currentTimeMillis());
}
AlarmReceiver.java
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "Alarm received!", Toast.LENGTH_LONG).show();
}
Manifest.xml
<receiver
android:name="yourpackagename.AlarmReceiver"
android:enabled="true"
android:permission="android.permission.RECEIVE_BOOT_COMPLETED"
android:process=":remote" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
权限:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
尝试上面的方法code.I确保警报管理器会被调用。
在@kgandroid 和@rainash 的帮助下,我终于得到了我想要的东西 在这里,我 post 我现在解决代码。这对我来说工作正常并显示通知。 而且我还可以在这里设置 Multiple AlarmManager 我需要的时间。
// Create alarm manager
AlarmManager alarmMgr0 = (AlarmManager) mContext
.getSystemService(Context.ALARM_SERVICE);
// Create pending intent & register it to your alarm notifier
// class
Intent intent0 = new Intent("alarm");
intent0.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent0.putExtra("req_code", v); // pI);
PendingIntent pendingIntent0 = PendingIntent
.getBroadcast(mContext, v, intent0,
PendingIntent.FLAG_UPDATE_CURRENT);
// set timer you want alarm to work
Calendar timeOff9 = Calendar.getInstance();
timeOff9.setTimeInMillis(System.currentTimeMillis());
timeOff9.set(scheduleDao1.getYear(),
(scheduleDao1.getMonth()) - 1, //Months start from '0'
scheduleDao1.getDay(),
(scheduleDao1.getFromTimeHr()) - 1,//I want those notification before 1hr
scheduleDao1.getFromTimeMin(), 0);
// long dateWeGet = Long.valueOf(dateString);
// set that timer as a RTC Wakeup to alarm manager object
alarmMgr0.set(AlarmManager.RTC_WAKEUP,
timeOff9.getTimeInMillis(), pendingIntent0);
contents.put(ALARM_REQUEST_CODE, v);