我的 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);