Класс тревоги Android - PullRequest
       6

Класс тревоги Android

1 голос
/ 23 февраля 2010

У меня есть класс, который устанавливает будильник, но мне нужно установить еще около 10 этих будильников. Вместо дублирования классов, есть ли способ, которым я могу просто сделать новый экземпляр класса и установить время будильника?

Вот мой код.

  import java.util.Calendar;

import java.lang.String;

import android.app.Activity;
import android.app.AlarmManager;
import android.app.ListActivity;
import android.app.PendingIntent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;

import android.content.Intent;
import android.widget.Button;
import android.widget.Toast;


public class Alarm extends Activity {
    /* for logging - see my tutorial on debuggin Android apps for more detail */
    private static final String TAG = "SomeApp "; 
    protected Toast mToast; 

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


    setAlarm();
    }





   public void setAlarm() {


        try {   

        Calendar cal = Calendar.getInstance();

        cal.add(Calendar.DAY_OF_YEAR, 0);
        cal.set(Calendar.HOUR_OF_DAY, 9);
        cal.set(Calendar.MINUTE, 01);
        cal.set(Calendar.SECOND, 0);


        Intent intent        = new Intent(Alarm.this, Alarm1.class);
        PendingIntent sender = PendingIntent.getBroadcast(this, 1234567, intent, 0);
        PendingIntent sende2 = PendingIntent.getBroadcast(this, 123123, intent, 0);

        AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
        am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), sender); // to be alerted 30 seconds from now
        am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), sende2); // to be alerted 15 seconds from now

        /* To show how alarms are cancelled we will create a new        Intent and a new PendingIntent with the
        * same requestCode as the PendingIntent alarm we want to cancel. In this case, it is 1234567.
            * Note: The intent and PendingIntent have to be the same as the ones used to create the alarms.
            */
        Intent intent1        = new Intent(Alarm.this, Alarm1.class);
        PendingIntent sender1 = PendingIntent.getBroadcast(this, 1234567, intent1, 0);
        AlarmManager am1 = (AlarmManager) getSystemService(ALARM_SERVICE);
        am1.cancel(sender1);


        } catch (Exception e) {
            Log.e(TAG, "ERROR IN CODE:"+e.toString());
        }
    }

};





    b1.setOnClickListener(new View.OnClickListener() {
                    public void onClick(View v) {


                    //  Intent i = new Intent(getContext(),Alarm.class);



//Code below is from another class which is where im calling the alarm application



                       // ctx.startActivity (i);// start the Alarm class activity (class)public void onClick(View v) {

                        Alarm a = new Alarm ();

                        a.setAlarm();


                        b1.setText(prod);


                    }
                });

Приведенный выше код взят из другого класса, и при нажатии кнопки пользователь может установить напоминание (кнопка вызывает класс тревоги, единственное, чтобы заставить его работать, - использование намерения. Я просто попытался вызвать метод setAlarm, но это не сработало. Может быть, я мог бы сделать новый экземпляр календаря и установить время в обработчике кнопок. Тогда я должен был бы передать этот экземпляр классу тревоги. Вы знаете, возможно ли это?

Ответы [ 2 ]

1 голос
/ 23 февраля 2010

Разве вы не можете просто создать один экземпляр Calendar в onCreate (), установить его параметры, затем передать экземпляр в setAlarm (), изменить экземпляр, вызвать setAlarm () и т. Д., Или я что-то упустил?

например. -

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main); 

    Calendar cal = Calendar.getInstance();

    cal.add(Calendar.DAY_OF_YEAR, 0);
    cal.set(Calendar.HOUR_OF_DAY, 9);
    cal.set(Calendar.MINUTE, 01);
    cal.set(Calendar.SECOND, 0);
    setAlarm(cal);

    cal.set(Calendar.HOUR_OF_DAY, 12);
    cal.set(Calendar.MINUTE, 30);
    setAlarm(cal);

//etc

}

public void setAlarm(Calendar cal) {

    try {   

    Intent intent        = new Intent(Alarm.this, Alarm1.class);
    PendingIntent sender = PendingIntent.getBroadcast(this, 1234567, intent, 0);
    PendingIntent sende2 = PendingIntent.getBroadcast(this, 123123, intent, 0);

    AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
    am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), sender); // to be alerted 30 seconds from now
    am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), sende2); // to be alerted 15 seconds from now

    /* To show how alarms are cancelled we will create a new        Intent and a new PendingIntent with the
    * same requestCode as the PendingIntent alarm we want to cancel. In this case, it is 1234567.
        * Note: The intent and PendingIntent have to be the same as the ones used to create the alarms.
        */
    Intent intent1        = new Intent(Alarm.this, Alarm1.class);
    PendingIntent sender1 = PendingIntent.getBroadcast(this, 1234567, intent1, 0);
    AlarmManager am1 = (AlarmManager) getSystemService(ALARM_SERVICE);
    am1.cancel(sender1);


    } catch (Exception e) {
        Log.e(TAG, "ERROR IN CODE:"+e.toString());
    }
}
0 голосов
/ 23 февраля 2010

Вы можете иметь только одно действие на переднем плане, поэтому, чтобы вызвать setAlarm 10 раз, вам нужно будет пройти альтернативный маршрут. Может петля? ;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...