7

以下を使用して、サービスによって設定された永続的な通知を削除しようとしています。

startForeground(1337, notification);

キャンセルに使用しているコード:

NotificationManager nManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
nManager.cancel(1337);  // cancel existing service notification, doesn't take effect
nManager.cancelAll(); //surpluous, but also doesn't take effect

私がこれを行っている理由を明確にするために:サービスはデフォルトの永続的な通知で開始します。アプリを実行するときは、この通知を別の通知に置き換える必要があります。既存の通知での使用notify()は完全に機能しますが、新しい通知のティッカーテキストも表示するために必要です。これが、既存の通知を(上記のコードを使用して)削除し、新しい通知を作成してから、もう一度呼び出しstartForeground()て新しい通知を渡すことにした理由です。これにより、サービスが持続します。

4

3 に答える 3

13

問題は、を使用して間接的な方法で通知を発行していることですstartForeground()。フォアグラウンド サービスを開始するときにシステムが通知を提供することを主張するのと同じ理由で、その通知をキャンセルすることはできません。フォアグラウンド サービスが実行されている限り、その通知は存在します。

ほとんどの場合、サービスは実際にはフォアグラウンドにあるべきではありません。サービスに通常の優先度を使用できる場合は、通常どおり通知を開始および停止できます。

本当にフォアグラウンド サービスを必要とすることを実際に行っていて、本当にユーザーにティッカー テキストを表示したい場合は、別の通知を発行することが唯一の選択肢だと思います。

于 2012-07-08T23:19:48.597 に答える
0

空の Builder を渡すことで、通知を更新できます。

if(showNotification){
    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this)
            .setVisibility(Notification.VISIBILITY_SECRET)
            .setSmallIcon(R.mipmap.ic_spotify_white_24dp)
            .setTicker("Playing Now")
            .setContentTitle("Spotify")
            .setContentText("Preview");
    return mBuilder;
}else{
    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this);
    return mBuilder;
}
于 2015-08-17T17:22:07.893 に答える