android alarm app using timepicker to select time and intents

房东的猫 提交于 2019-12-11 14:57:55

问题


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();
}
 }

回答1:


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());


来源:https://stackoverflow.com/questions/18798459/android-alarm-app-using-timepicker-to-select-time-and-intents

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!