简体   繁体   中英

android alarm app using timepicker to select time and intents

can anyone help me with a normal alarm clock app that uses TimePicker to set the time ..and also uses intents,etc instead of normal comparisons.This is the code that i've done till now.But this is not working. The 'TimePicker' sets the time and on pressing the 'ToggleButton' a 'TextVew' shows that alarm is on .But when the alarmtime is reached,Alarm Ringing message is not shown.Please someone help me out. this is the code of main activity

public  class FullscreenActivity extends Activity implements OnClickListener  {
        TimePicker TimePickerForGettingTime;
        TextView AlarmSet;
        TextView AlarmOnOff;



        ToggleButton ConfirmButton;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_fullscreen);


       TimePickerForGettingTime=   (TimePicker)findViewById(R.id.TimePickerForGettingTime);
       ConfirmButton = (ToggleButton) findViewById(R.id.ConfirmButton);




        ConfirmButton.setOnClickListener(new OnClickListener(){

               @Override
            public void onClick(View v)
            {      boolean on=((ToggleButton) v).isChecked() ;
                  AlarmOnOff=(TextView)findViewById(R.id.AlarmOnOff);

                  if(on)
                  {     
                   AlarmOnOff.setText("Alarm on");

                    Calendar cal = Calendar.getInstance();
                            cal.set(TimePickerForGettingTime.getCurrentHour(),TimePickerForGettingTime.getCurrentMinute(),00);

                        setAlarm(cal);

                  }
                  else
                  { 
                      AlarmOnOff.setText("Alarm off");
                  }
                  }

        });
     }
      private void setAlarm(Calendar targetCal)
      {


          Intent alarmintent = new Intent(FullscreenActivity.this, AlarmReceiver.class);
          PendingIntent sender = PendingIntent.getBroadcast(FullscreenActivity.this, 0, alarmintent, 0);
          AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
          alarmManager.set(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(), sender);   


        }
    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub

    }

 }

this is the onbootreceiver class

   public class OnBootReceiver extends BroadcastReceiver {
      private static final int PERIOD=10000;  // 10sec

      @Override
      public void onReceive(Context context, Intent intent) {
      AlarmManager mgr=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
      Intent i=new Intent(context, AlarmReceiver.class);
      PendingIntent pi=PendingIntent.getBroadcast(context, 0, i, 0);

      mgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), PERIOD, pi);
 }
}

this is the alarmreceiver class

   public class AlarmReceiver extends BroadcastReceiver {

     @Override
     public void onReceive(Context context, Intent intent) {



 PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, 0);
 NotificationManager manager =    (NotificationManager)context.getSystemService(android.content.Context.NOTIFICATION_SERVICE);
    Notification noti = new Notification(android.R.drawable.stat_notify_more, "Wake up alarm", System.currentTimeMillis());
    noti.setLatestEventInfo(context, "My Alarm", "WAKE UP...!!!", sender);
    noti.flags = Notification.FLAG_AUTO_CANCEL;
    manager.notify(R.string.app_name, noti); 

    //intent to call the activity which shows on ringing
    Intent myIntent = new Intent(context, FullscreenActivity.class);
    myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(myIntent);

    //display that alarm is ringing
    Toast.makeText(context, "Alarm Ringing...!!!", Toast.LENGTH_LONG).show();
}
 }

Have you registered the alarm receiver in you manifest ?

You should have this in your manifest.

 <application>
   .
   .
   .
 <receiver android:name=".AlarmReceiver" android:process=":remote" />
</application>

Also, I am not sure that is the right way to calendar set, but I could be wrong . I do it like this and it works fine for me

            Calendar cal = Calendar.getInstance();

           cal.set (Calendar.HOUR_OF_DAY, time_picker.getCurrentHour());
           cal.set (Calendar.MINUTE, time_picker.getCurrentMinute());

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM