65

フォアグラウンド サービスとして実行されているサービスを停止しようとしています。

現在の問題は、私が呼び出しstopService()ても通知が残ることです。

したがって、私のソリューションでは、登録しているレシーバーをonCreate()

メソッド内でonReceive()呼び出すstopforeground(true)と、通知が非表示になります。そしてstopself()、サービスを停止します。

内部ではonDestroy()、受信者の登録を解除しました。

これを処理するより適切な方法はありますか?stopService() は単に機能しないためです。

@Override
public void onDestroy(){
  unregisterReceiver(receiver);
  super.onDestroy();
}
4

7 に答える 7

91

アクティビティ呼び出しから、サービスを停止するためstartService(intent)のキーを表すデータを渡します。

あなたのサービスコールから、stopForeground(true)そしてそのstopSelf()直後。

于 2013-12-31T12:22:58.133 に答える
0

サービスを停止してから通知を更新する場合は、最初に stopSelf() を呼び出してから、notify() を呼び出すことができます。stopForeground(false) は、通知をキャンセル可能にします。

 private final BroadcastReceiver myBgWorkCompleteReceiver= new BroadcastReceiver() {
        @Override
  public void onReceive(Context context, Intent intent) {
            stopSelf();
            notificationLayoutExpanded.setTextViewText(R.id.file_download_notify_download_percentage, "Background work completed");
            manager.notify(mNotificationId, notification);
            stopForeground(false);
        }
};


 public void onDestroy() {
        super.onDestroy();
        // cancel any running threads here
        LocalBroadcastManager.getInstance(this).unregisterReceiver(myBgWorkCompleteReceiver);
    }
于 2019-09-04T07:41:06.947 に答える