2017-01-20 4 views
1

Как я могу реализовать будильник, чтобы открыть экран увольнения/повтора после того, как приложение будет уничтожено? Моя тревога отлично работает до тех пор, как приложение остается вверх, вот как я планировать тревогу:Тревога не исчезает, когда приложение убито

//instantiate calendar to call alarm on time match 
Calendar calendar = Calendar.getInstance(); 
calendar.set(Calendar.HOUR_OF_DAY, alarmTimePicker.getCurrentHour()); 
calendar.set(Calendar.MINUTE, alarmTimePicker.getCurrentMinute()); 

//if time is set earlier than current (e.g set for 6:59pm, currently 7pm), do not play until next clock cycle/day 
if(calendar.before(Calendar.getInstance())) { 
    calendar.add(Calendar.DATE, 1); 
} 

//cancel any currently pending intents if toggle button is toggled on 
Intent myIntent = new Intent(MainActivity.this, AlarmReceiver.class); 
PendingIntent.getBroadcast(MainActivity.this, 0, myIntent, PendingIntent.FLAG_UPDATE_CURRENT).cancel(); 

//add parameters to pass to activities that play the alarm 
myIntent.putExtra("stream",stream); 
myIntent.putExtra("seconds",snoozeSeconds); 
myIntent.putExtra("link",ytLink); 

//create pending intent to broadcast to activity that plays the alarm 
pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, myIntent, 0); 
alarmManager.setExact(AlarmManager.RTC, calendar.getTimeInMillis(), pendingIntent); 

И я использую приемник, который довольно прост:

public class AlarmReceiver extends WakefulBroadcastReceiver { 

    @Override 
    public void onReceive(final Context context, Intent intent) { 
    //.... 
    MainActivity.ringtone.play(); 
    Intent alarmIntent = new Intent(context, AlarmActivity.class); 
    context.startActivity(alarmIntent); //start dismiss screen 
+0

Может быть, вы пишете в своей деятельности OnDestroy() что-нибудь вроде '.ringtone.stop()'? – Urma

+0

Я бы предположил, что вызов 'MainActivity.ringtone.play()' бросает исключение. Проверьте свой логарифм. Кроме того, для запуска 'Activity' в параметре' Context' получателя требуется 'Intent.FLAG_ACTIVITY_NEW_TASK'. –

ответ

1

По вашему вопросу, Это то, что я понимаю, дайте мне знать, если неправильно понять ваш вопрос

, если вы хотите, чтобы открыть/активный ваш alaram после App близко или перезагрузки устройства , то вы должны добавить фильтр намерений android.intent.action.BOOT_COMPLETED в вашем AlarmReceiver AndroidManifest.xml и вы можете управлять действиями на вашем AlarmReceiver OnReceive Methond

Пожалуйста, проверьте следующий код

public void onReceive(Context context, Intent intent) { 
if(intent == null){ 
return; 
} 
String action = intent.getAction(); 
if (action != null && action.equalsIgnoreCase("android.intent.action.BOOT_COMPLETED")) { 
} 

AlarmReceiver.completeWakefulIntent(intent); 

} 

Добавить намерений действия фильтра в файле AndroidManifest.xml

<receiver android:name="com.monster.android.Services.AlarmReceiver" 
android:enabled="false"> 
<intent-filter> 
<action android:name="android.intent.action.BOOT_COMPLETED"/> 
</intent-filter> 
</receiver> 
0

Вы можете использовать StopService() метод :

stopService(new Intent(MainMenu.this, AlarmActivity.class)); 
Смежные вопросы