Android通知マネージャーは画面で動作しません
-
09-10-2019 - |
質問
カウントダウンタイマーがあります(ゼロに)オフになると、アプリにフォーカスがあるかどうかを確認することができます。そうでない場合は、通知バーで通知を起動します。 [通知]をクリックすると、アプリが再び開きます。これですべてが正常に機能しますが、画面がオフになった場合、タイマーが続き、通知が適切なタイミングで利用可能になりますが、画面を元に戻すまで実際に振動したりリングしたりすることはありません。次に、キューなどで待っているように通知を表示します。
通知マネージャーが画面の電源を切ったときに実際にユーザーに警告するようにするにはどうすればよいですか?
更新:タイマーを2分間設定すると、通知が実際に機能するまでさらに2〜3分かかります。それは機能しますが、大きな遅れです!
コード:アプリがフォーカスを失ったときに通知サービスをセットアップし、MyCount1が完了したときは、アプリにフォーカスがあり、そうでない場合は通知が表示されない場合がチェックされます。これはすべて、画面のバックライトがオンになっているときに機能します。オフになると信頼できません。
@Override
public void onWindowFocusChanged(boolean hasFocus){
if(hasFocus == false){
mFocusFlag = false;
ns = Context.NOTIFICATION_SERVICE;
mNotificationManager = (NotificationManager) getSystemService(ns);
icon = R.drawable.statusbar;
tickerText = "Check the timer!!!";
when = System.currentTimeMillis();
notification = new Notification(icon, tickerText, when);
context = getApplicationContext();
contentTitle = "Countdown Timer";
contentText = "Click to Check the Timer";
notification.defaults |= Notification.DEFAULT_SOUND;
notification.defaults |= Notification.DEFAULT_VIBRATE;
notification.flags |= Notification.FLAG_AUTO_CANCEL;
notificationIntent = new Intent(this, StartTimer.class);
contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
}else{
mFocusFlag = true;
}
}
public class MyCount1 extends CountDownTimer {
public MyCount1(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);
}
public void onFinish() {
if(mFocusFlag == false){
mNotificationManager.notify(HELLO_ID, notification);
}else{
mVib.vibrate(1000);
}
}
public void onTick(long millisUntilFinished) {
if((millisUntilFinished/1000%60) < 10){
mTime.setText("1st Side = " + millisUntilFinished/60000 + ":0" + (millisUntilFinished / 1000)%60);
}else{
mTime.setText("1st Side = " + millisUntilFinished/60000 + ":" + (millisUntilFinished / 1000)%60);
}
}
}
解決
これですべてが正常に機能しますが、画面がオフになった場合、タイマーが続き、通知が適切なタイミングで利用可能になりますが、画面を元に戻すまで実際に振動したりリングしたりすることはありません。次に、キューなどで待っているように通知を表示します。
通知マネージャーが画面の電源を切ったときに実際にユーザーに警告するようにするにはどうすればよいですか?
画面がオフになると、何かが保持されていない限り、CPUはその後すぐに実行を停止します WakeLock
.
これは、2つのことの1つを意味します。
あなたはこれをすべて理解し、aを保持しています
WakeLock
. 。これは、ユーザーがデバイスで好きなもの(たとえば、バッテリー寿命が良好)の観点から、良いアイデアである場合とそうでない場合があります。そうかもしれませんが、あなたはより強く保つ必要があるかもしれませんWakeLock
, 、画面を少なくとも薄暗く保つもの。私はaを上げようとしませんでしたNotification
aの下でWakeLock
, 、だから私はルールがすべて何であるかは不明です。これをすべて理解しているわけではないため、実際にはデバイスが眠りに落ち、CPUがオフになったときにタイマーが進んでいると考えています。 CPUが再びオンになったとき、タイマーはすぐにオフになります。
使用 AlarmManager
デバイスを目覚めさせるタイマーベースのイベントを行うことができ、その間にコードをメモリにぶらぶらする必要はありません。私はあなたがここで何をしようとしているのか分かりません(あなたの説明からはむしろ奇妙に思えます)が AlarmManager
タイマーの代替として調査する価値のあるものかもしれません。
他のヒント
たとえば、電子メールのアプリケーションが定期的に新しいメールをチェックするために、他のアプリケーションによって携帯電話が目覚めたときにオフになるでしょう。必要な時点で発射するために独自のアラームを設定する必要があります。 http://developer.android.com/reference/android/app/alarmmanager.html
NotificationManagerには時間の概念がありません。どういうわけかトリガーする必要があります。あなたの場合の問題は、電話を眠らせば、まさにそれを行うことです。アラームは特に存在しているため、必要に応じてデバイスを起動できます。