私はデータ用にウェブサイトをスクラップし、必要に応じて通知するサービスを持っています。サービスが終了するとすぐに通知が消えます
私が抱えている問題は、サービスが終了するとすぐに通知が消えることです(瞬時に可能性があります)。以下のコードは、アプリが持つすべての通知コードです。通知を取り消すコードは一切入れていません。
public static void CreateNotificationCompat(int notificationID, String link, String title, String text, Context ctx)
{
Intent notificationIntent = new Intent("android.intent.action.VIEW", Uri.parse(link));
PendingIntent contentIntent = PendingIntent.getActivity(ctx.getApplicationContext(), 0, notificationIntent, 0);
NotificationManager nm = (NotificationManager) ctx
.getSystemService(Context.NOTIFICATION_SERVICE);
NotificationCompat.Builder builder = new NotificationCompat.Builder(ctx);
Resources res = ctx.getResources();
builder.setContentIntent(contentIntent)
.setSmallIcon(R.drawable.notify_icon)
.setWhen(System.currentTimeMillis())
.setContentTitle(title)
.setContentText(text)
.setAutoCancel(false);
Notification n = builder.getNotification();
nm.notify(notificationID, n);
}
私がここでアプリケーションのコンテキストを使用している場合は、(それがないと確信して)何か違いがあれば
私のサービスは定期的に開始され、ウェブサイトを処理し、必要に応じて通知して終了します。
stopSelf()を呼び出すのではなく、サービスの終了時に30秒間スリープしてからstopSelf()を呼び出します。その後、通知は30秒間続き、消えます。通知が消えた時点で、関連するものはlogcatに表示されません。
私はこれまでICSを使用してテストできました。
これは問題ないはずです。通常、アプリケーションが強制終了された場合にのみ通知が消えます。私は何かがクラッシュしていることを期待する。実際にどのスレッドがスリープ状態になっているのか、どのスレッドが実行されているのかを知ることは面白いでしょう。実験のために30代の睡眠を取り除き、同じ行動が起こるかどうかを調べることも興味深いでしょう。 – kabuko
通知があれば、その通知をキャンセルするコードはどこですか?また、FYIでは、android.intent.actionのような直接の文字列を使うべきではありません。*これは、Intentクラスで利用可能な定数です。 @ user1531605 – JoxTraex
通知が「直前」に、つまり同じコード実行チェーンで通知を停止するように要求された場合、通知はクリアされます。 –