Требуется помощь в приложении тревоги - PullRequest
0 голосов
/ 18 декабря 2010

Я новичок в Android. Я пытаюсь разработать приложение для будильника, которое на самом деле является говорящими часами. Я просто хочу, чтобы часы использовали TextToSpeech API и говорили о приветствии и текущем времени, как только будет установлено время будильника. Речевая часть сделана. И теперь я хочу реализовать функциональность Alarm. Но сначала я просто пытаюсь отобразить тост через 10 секунд, чтобы проверить, правильно ли работают мои классы. И я не получаю желаемого ответа, и я не знаю почему? Ниже приведены классы

Основной класс aClockActivity

public class aClockActivity extends Activity {
    /** Called when the activity is first created. */
  private PendingIntent mAlarmSender;

 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


        setContentView(R.layout.main);

        Button button1 = (Button)findViewById(R.id.buttonOn);
        button1.setOnClickListener(mStartAlarmListener);
        Button button2 = (Button)findViewById(R.id.buttonOff);
        button2.setOnClickListener(mStopAlarmListener);

    }

 private OnClickListener mStartAlarmListener = new OnClickListener() {
        public void onClick(View v) {
            // We want the alarm to go off 30 seconds from now.
            //long firstTime = SystemClock.elapsedRealtime();
            EditText Ehour = (EditText) findViewById(R.id.hour);
            EditText Eminute = (EditText) findViewById(R.id.minute);

            CharSequence CharHour = Ehour.getText();
            CharSequence CharMinute = Eminute.getText();
            int hour = Integer.parseInt(CharHour.toString());
            int minute = Integer.parseInt(CharMinute.toString());

            Calendar cal = Calendar.getInstance();
            cal.setTimeInMillis(System.currentTimeMillis());
           // calendar.add(Calendar.MINUTE, 1);
            cal.add(Calendar.SECOND, 10);

            mAlarmSender = PendingIntent.getBroadcast(aClockActivity.this,
                    0, new Intent(aClockActivity.this, Alarm_Broadcast.class), 0);


            // Schedule the alarm!
            AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
            am.set(AlarmManager.RTC_WAKEUP,
                            cal.getTimeInMillis(), mAlarmSender);

            // Tell the user about what we did.
            Toast.makeText(aClockActivity.this, "The Alarm is Set",
                    Toast.LENGTH_LONG).show();
        }
    };

    private OnClickListener mStopAlarmListener = new OnClickListener() {
        public void onClick(View v) {
            // And cancel the alarm.
            AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
            am.cancel(mAlarmSender);

            // Tell the user about what we did.
            Toast.makeText(aClockActivity.this, "Setting off the alarm",
                    Toast.LENGTH_LONG).show();

        }
    };

Второй класс Alarm_Broadcast

public class Alarm_Broadcast extends BroadcastReceiver{
  @Override
     public void onReceive(Context context, Intent intent) {
         Toast.makeText(context, "Alarm worked", Toast.LENGTH_LONG).show();
     }


}

Примечание. Просто игнорируйте часть Edittext в методе OnClick (), я бы использовал его позже.

Помимо вышеуказанной проблемы, я хотел бы задать несколько вопросов.

1) Как я могу реализовать это приложение, чтобы при установке будильника оно могло фактически работать как служба в панели уведомлений, где запускается оригинальный AlarmClock. Так что, даже если приложение закрыто, оно все еще работает, чтобы вызвать нужное сообщение в нужное время.

2) Я не могу показать ни одно диалоговое окно или могу использовать TTS, если AlarmManager вызывает класс, который расширяет либо Service, либо BroadcastReciever.

3) Я был бы признателен, если бы кто-нибудь дал мне идею реализовать это приложение, я уверен, что есть много экспертов, которые бы прошли через это приложение.

Привет

Омайр

Ответы [ 3 ]

2 голосов
/ 19 декабря 2010

Вот пример кода, который я использовал в приложении для будильника, надеюсь, это поможет.

Чтобы установить будильник:

private void setAlarm () {

    Context context = getApplicationContext();

    AlarmManager mgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
    Intent i = new Intent(context, OnAlarmReceiver.class);
    PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
    myCal = Calendar.getInstance();
    myCal.setTimeInMillis(TIME_THE_ALARM_SHOULD_GO_OFF_AS_A_LONG);
    mgr.set(AlarmManager.RTC_WAKEUP, myCal.getTimeInMillis(), pi);
    Log.i(myTag, "alarm set for " + myCal.getTime().toLocaleString());
    Toast.makeText(getApplicationContext(),"Alarm set for " + myCal.getTime().toLocaleString(), Toast.LENGTH_LONG).show();

}

Это относится к классу onAlarmReceiver:

public void onReceive (Контекст контекста, намерение намерения) {Intent i = new Intent (context, AlarmActivity.class);i.addFlags (Intent.FLAG_ACTIVITY_NEW_TASK);context.startActivity (я);}

это запустит AlarmActivity всякий раз, когда необходимо отключиться.В вашем случае вы поместите тост и речь в AlarmActivity.

1 голос
/ 18 декабря 2010

Как я могу реализовать это приложение, чтобы при установке будильника оно могло фактически работать как служба в панели уведомлений, где работает оригинальный AlarmClock. Так что, даже если приложение закрыто, оно все еще работает, чтобы вызвать тревожное сообщение в нужное время.

Не делай этого. Служба круглосуточно работает в памяти, чтобы наблюдать за часами - это бесполезная трата оперативной памяти, и вы будете атакованы убийцами задач, что снизит эффективность вашего приложения. Пожалуйста, придерживайтесь AlarmManager.

Я не могу показать ни одно диалоговое окно или могу использовать TTS, если AlarmManager вызывает класс, который расширяет либо Service, либо BroadcastReciever.

Начните занятие, возможно, занятие на тему диалога.

0 голосов
/ 21 декабря 2010

Только что получил ответ, какую бы услугу, получатель, деятельность и т. Д. Вы использовали, вам необходимо зарегистрировать ее в своем AndroidManifest.xml.Или это не будет работать

...