У меня есть следующий код, чтобы вызвать тревогу, которая, когда она срабатывает, предназначена для запуска другого действия, которое, в основном, дремлет. После долгих поисков в 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
должен создать сигнал тревоги для его запуска, он никогда не бывает.
Есть что-то, что я пропускаю?