2017-01-14 9 views
1

問題をすばやくまとめて設定するには、設定したアラームと設定された翌日のアラームの間に設定されたアラームが消えます。私のコードはすべて正常に動作するように見えますが、アラームは適切なタイミングで設定され、解除されます。初期アラームが発生して完了すると、自動的に翌日に設定されます。私はadbシェルのdumpsysアラームでそれを確認して見ることができます。設定後、AlarmManagerアラームはランダムに消えます

アップデート:私はベッドに行くと、目を覚ますと、アラームが不思議adbのシェルから欠落している次の日をチェックすると、私はいくつかのより多くの

[14/01/2017 20:57:41] Registering start alarm 1 with Alarm Manager event time: 14/01/2017 21:00:00 
[14/01/2017 20:57:41] Registering stop alarm 1001 with Alarm Manager event time: 14/01/2017 21:01:00 
[14/01/2017 21:00:00] Receiver has received INTENT_ACTION_ALARM_START and is launching the music player for task #1. 
[14/01/2017 21:01:00] Receiver has received INTENT_ACTION_ALARM_STOP and is stopping the music player, and sending a restart request to the MusicService. 
[14/01/2017 21:01:00] Restart requested on alarm 1, attempting to add new alarms for tomorrow. 
[14/01/2017 21:01:00] Registering start alarm 1 with Alarm Manager event time: 15/01/2017 21:00:00 
[14/01/2017 21:01:00] Registering stop alarm 1001 with Alarm Manager event time: 15/01/2017 21:01:00 

Batch{43d23730 num=1 start=86684689 end=86684689}: 

    RTC_WAKEUP #0: Alarm{438c1740 type 0 org.hudsoft.music} 

    type=0 whenElapsed=86684689 when=+23h55m1s357ms window=0 repeatInterval=0 count=0 

    operation=PendingIntent{43af9370: PendingIntentRecord{43ddd9a8 org.hudsoft.music broadcastIntent}} 

Batch{43d1e348 num=1 start=86744688 end=86744688}: 

    RTC_WAKEUP #0: Alarm{438c10d8 type 0 org.hudsoft.music} 

    type=0 whenElapsed=86744688 when=+23h56m1s357ms window=0 repeatInterval=0 count=0 

    operation=PendingIntent{438ea450: PendingIntentRecord{4393a970 org.hudsoft.music broadcastIntent}} 

ここだけの以下の情報をログ追加したがdumpsysの出力は実行されません。 私の質問は、アラームがどこにユーザーの介入なしに行くのですか?持続するアラームを設定するにはどうすればよいですか? 「アラームマネージャは、アプリケーションが現在実行されていなくても特定の時刻にアプリケーションコードを実行させたい場合に適しています」と主張しています。

私の現在の設計は、 BOOTイベントが受信者によって受信されました。アラームマネージャがすべて を処理すると仮定して、すべてのアラームを設定して消えるIntentServiceを実行します。私の受信機は応答を待つ必要があります、問題は毎晩私が眠りにつくために起きます。私の目覚ましマネージャーrtc起床は不思議に姿を消しました。

問題の診断に役立つその他の情報が必要な場合は、これが私の最初の投稿であることをお知らせください。私は苦労しており、約1週間は解決策を探しています!私の受信機で

は、音楽再生サービスを停止しても、次の日のための新しいアラーム再起動するには、この火災:ここ

if (intent.getAction().equals("INTENT_ACTION_ALARM_END")) { 
    Intent stopIntent = new Intent(context, MusicPlayer.class); 
    Task thisTask = (Task) intent.getSerializableExtra("thisTask"); 
    stopIntent.putExtra("thisTask", thisTask); 
    context.stopService(stopIntent); 
    Intent restartAlarmIntent = new Intent(context, MusicService.class); 
    restartAlarmIntent.setAction("INTENT_ACTION_ALARM_RESTART"); 
    restartAlarmIntent.putExtra("thisTask", thisTask); 
    context.startService(restartAlarmIntent); 
} 

は、私はアラームを構築し、起動するために使用するコードです

Intent myIntent = new Intent(this, MusicReceiver.class); 
    myIntent.setAction("INTENT_ACTION_ALARM_START"); 
    myIntent.putExtra("thisTask", task); 
    Log.d("Intent", "Sending start intent now"); 
    PendingIntent pendingStartIntent = buildAlarmIntent(task, "INTENT_ACTION_ALARM_START"); 
    setSingleExactAlarm(endTime, pendingStartIntent); 

    myIntent = new Intent(this, MusicReceiver.class); 
    myIntent.setAction("INTENT_ACTION_ALARM_END"); 
    myIntent.putExtra("thisTask", task); 
    Log.d("Intent", "Sending end intent now"); 
    PendingIntent pendingStopIntent = buildAlarmIntent(task, "INTENT_ACTION_ALARM_END"); 
    setSingleExactAlarm(endTime, pendingStopIntent); 

public PendingIntent buildAlarmIntent (Task task, String action) { 
    PendingIntent pendingIntent; 
    Intent myIntent = new Intent(this, MusicReceiver.class); 
    myIntent.setAction(action); 
    myIntent.putExtra("thisTask", task); 
    Integer idNum = task.getId(); 
    if (action.equals("INTENT_ACTION_ALARM_END")) { 
     idNum += 1000; 
     pendingIntent = PendingIntent.getBroadcast(this, idNum, myIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
    } else { 
     pendingIntent = PendingIntent.getBroadcast(this, idNum, myIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
    } 
    return pendingIntent; 
} 

private void setSingleExactAlarm(long time, PendingIntent pIntent) { 
    AlarmManager mAlarmManager; 
    mAlarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
    if (android.os.Build.VERSION.SDK_INT >= 19) { 
     mAlarmManager.setExact(AlarmManager.RTC_WAKEUP, time, pIntent); 
    } else { 
     mAlarmManager.set(AlarmManager.RTC_WAKEUP, time, pIntent); 
    } 
} 
ここ

は私AndroidManifestの受信部は、滝を事前に

<receiver 
     android:name=".MusicReceiver" 
     android:enabled="true" 
     android:exported="true" 
     android:process=":remote"> 
     <intent-filter> 
      <action android:name="INTENT_ACTION_ALARM_START" /> 
      <action android:name="INTENT_ACTION_ALARM_END" /> 
      <action android:name="android.intent.action.BOOT_COMPLETED" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </receiver> 

おかげで私の問題を調べる時間をとってください!

答えて

1

私は自分の問題を発見しました。他の誰かが同様の問題に遭遇した場合に投稿すると思いました。私のアラームは前に設定した時間で再開していました。時間がすでに過ぎてから、すぐに解決して消えてしまいます。これはまた、何度も何度も再起動しようとするループを引き起こしましたが、アラームマネージャはイベントの後に起こっていることを認識し、それらをキューイングして、過去の開始時刻のアラームをリセットする無限ループを防止します。これが誰かを助けることを願って!

0

私は明確な答えがないので、コメントを残すほどの評判はありません。ただし、携帯電話の電源が切れている可能性はありますか? Androidのドキュメントによると:

https://developer.android.com/reference/android/app/AlarmManager.html

「登録アラームは、デバイスが眠っている間に保持されている(そして、彼らはその時にオフに行く場合は、必要に応じてデバイスをウェイクアップすることができます)、それがなっている場合にクリアされますオフにして再起動しました。

BOOT_COMPLETEDを受け取っているコードがなくても、さらに診断することは困難です。私はこのことができます、と幸運を願ってい

AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
    Intent intent = new Intent(context, MyBroadcastReceiver.class); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT); 
    alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, alarmStartTime.getTimeInMillis(), pendingIntent); 

過去には、私はアラームを設定する、と私はあなたが説明している問題を持っていない、次を使用しました。

+0

ご回答いただきありがとうございます。電話機の電源が切れません。実際には、私が目を覚まして確認したときに活動がまだ現れています。しかし、私がチェックadbシェルを行うために行くと、アラームイベントがありません。 –

関連する問題