AlarmMananger не отображается для выполнения - почему? - PullRequest
1 голос
/ 13 декабря 2011

У меня есть следующий код, чтобы вызвать тревогу, которая, когда она срабатывает, предназначена для запуска другого действия, которое, в основном, дремлет. После долгих поисков в Google и SO я в растерянности. Я считаю, что у меня есть правильная настройка для AlarmManager, но Activity, который он должен запустить, никогда не запускается.

Кстати, в конце концов я хочу использовать переменную napTime, чтобы установить время срабатывания AlarmManager, но для целей тестирования я просто пытаюсь заставить его срабатывать правильно.

Вот код для установки сна. Строка Log.e("Nap time", "" + napTime); всегда показывает правильный номер, который был выбран для napTime, поэтому я знаю, что метод выполняется.

private void setNap(int napTime) {
        AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);       
        Intent i = new Intent(getApplicationContext(), NapAlarm.class);
//      i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        PendingIntent pi = PendingIntent.getActivity(getApplicationContext(), 0, i, 0);     
        am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), pi);

        Log.e("Nap time", "" + napTime);

        TextView nap = (TextView) findViewById(R.id.nap);
        nap.setText("nap set");
    }

И код запускаемой активности:

import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.WindowManager;
import android.view.View.OnClickListener;
import android.widget.Button;

public class NapAlarm extends Activity implements OnClickListener {

    MediaPlayer mp;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.alarm_layout);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);

        Button dButton = (Button) findViewById(R.id.dismissButton);
        dButton.setOnClickListener(this);

        Button sButton = (Button) findViewById(R.id.snoozeButton);
        sButton.setOnClickListener(this);

        new Thread(new Runnable() {

            public void run() {
                try {

                    Log.e("Got this far", "In the alarm");

                    mp = MediaPlayer.create(getApplicationContext(), R.raw.alarm);
                    mp.start();
                    mp.setLooping(true);

                } catch (Exception e) {
                }
            }
        }).start();
    }

    @Override
    public void onClick(View v) {

        switch (v.getId()) {

        case R.id.dismissButton:
            mp.stop();
            this.finish();
            break;

        case R.id.snoozeButton:
            Button sButton = (Button) findViewById(R.id.snoozeButton);
            sButton.setText("I'm sorry, this app currently does not support snoozing, you must wake up.");
            break;
        }
    }
}

Если я запускаю второй фрагмент кода сам по себе, он работает и воспроизводится звук, и т. Д. Но если я запускаю его из более крупного проекта, из которого AlarmMananger должен создать сигнал тревоги для его запуска, он никогда не бывает.

Есть что-то, что я пропускаю?

1 Ответ

0 голосов
/ 13 декабря 2011

Ваша деятельность в NapTime должна расширять приемник BroadCast, как это ..

public class NapAlarm extends BroadcastReceiver {

@Override
 public void onReceive(Context context, Intent intent) {
//Here do your naptime code.

//YOu could actually have your NapTime class launch from this reciever if you want.
}

}

Убедитесь, что вы зарегистрировали свой приемник, как это ..

<receiver  android:process=":remote" android:name="NapAlarm"></receiver>

Подробнее см. Здесь

Учебник по Alarm Manager

...