2017-01-20 13 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

はたぶん、あなたが書いたあなたのAndroidManifest.xmlファイルにインテントフィルタのアクションを追加し、次のコード

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); } 

を確認してください? – Urma

+0

'MainActivity.ringtone.play()'呼び出しがExceptionを投げていると思います。あなたのlogcatを確認してください。また、Receiverの 'Context'パラメータで' Activity'を開始するには 'Intent.FLAG_ACTIVITY_NEW_TASK'が必要です。 –

答えて

1

、これは私が理解、あなたの質問を誤解している場合、私に教えてくださいある

アプリ近いか、デバイスの再起動 後にアクティブ/自分のalaramを開きたい場合は、あなたがあなたのAlarmReceiverのAndroidManifest.xmlにandroid.intent.action.BOOT_COMPLETEDインテントフィルタを追加していると、あなたはAlarmReceiver onReceiveが

をmethondあなたの行動を管理することができます

は `.ringtone.stop()`のようなあなたの活動onDestroy()何で

<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()メソッドを使用することができます:

あなたの質問を1として
stopService(new Intent(MainMenu.this, AlarmActivity.class)); 
関連する問題