警报未在固定时间发射

时间:2013-06-04 07:03:48

标签: android android-intent android-broadcast

使用以下代码我设置了无效的警报:

       /** Called when the activity is first created. */
       @Override
       public void onCreate(Bundle savedInstanceState) 
       {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);

          textAlarmPrompt = (TextView)findViewById(R.id.alarmprompt);

          buttonstartSetDialog = (Button)findViewById(R.id.startSetDialog);
          buttonstartSetDialog.setOnClickListener(new OnClickListener()
          {
             @Override
             public void onClick(View v) 
             {
                textAlarmPrompt.setText("");
                openTimePickerDialog(false);
             }
          });
       }

       private void openTimePickerDialog(boolean is24r)
       {
          Calendar calendar = Calendar.getInstance();

          timePickerDialog = new TimePickerDialog(
                MainActivity.this, 
                onTimeSetListener, 
                calendar.get(Calendar.HOUR_OF_DAY), 
                calendar.get(Calendar.MINUTE), 
                is24r);
          timePickerDialog.setTitle("Set Alarm Time");  

          timePickerDialog.show();

       }

       OnTimeSetListener onTimeSetListener = new OnTimeSetListener()
       {
          @Override
          public void onTimeSet(TimePicker view, int hourOfDay, int minute) 
          {
             Calendar calNow = Calendar.getInstance();
             Calendar calSet = (Calendar) calNow.clone();

             calSet.set(Calendar.HOUR_OF_DAY, hourOfDay);
             calSet.set(Calendar.MINUTE, minute);
             calSet.set(Calendar.SECOND, 0);
             calSet.set(Calendar.MILLISECOND, 0);

             if(calSet.compareTo(calNow) <= 0)
             {
                //Today Set time passed, count to tomorrow
                calSet.add(Calendar.DATE, 1);
             }

             setAlarm(calSet);
          }
       };

       private void setAlarm(Calendar targetCal)
       {
          textAlarmPrompt.setText(
                "\n\n***\n"
                      + "Alarm is set@ " + targetCal.getTime() + "\n"
                      + "***\n");

          Intent intent = new Intent(getBaseContext(), AlarmReceiver.class);
          PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), RQS_1, intent, 0);
          AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
          alarmManager.set(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(), pendingIntent);
       }
}

接收器:

public class AlarmReceiver extends BroadcastReceiver 
{
   @Override
   public void onReceive(Context arg0, Intent arg1)
   {
      Toast.makeText(arg0, "Alarm received!", Toast.LENGTH_LONG).show();
   }
}

logcat没有错误。请帮忙。

1 个答案:

答案 0 :(得分:0)

将广播接收器添加到Android清单中,如:

<receiver android:name="MyScheduleReceiver" >
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>
        <receiver android:name="MyStartServiceReceiver" >
        </receiver>