2016-03-25 5 views
2

通知先IDでフォアグラウンドサービスを開始しましたが、stopForeground(false)に電話をかけようとするとサービスが再開されています。しかし、このメソッドを呼び出すアンドロイドのドキュメントによれば、サービスは停止しません。stopForegroundを呼び出すと現在のサービスが再開されます

@Override 
    public void onCreate() { 
     LogHelper.d(TAG, "onCreate"); 
     super.onCreate(); 
     initMediaSeesion(); 
    } 

@Override 
    public int onStartCommand(Intent startIntent, int flags, int startId) { 
     LogHelper.d(TAG, "onStartCommand"); 
     MediaButtonReceiver.handleIntent(mSession, startIntent); 
     return START_STICKY; 
    } 

    public void startNotification() { 
      if (!mStarted) { 
       Notification notification = createNotification(); 
       if (notification != null) { 
        mService.startForeground(NOTIFICATION_ID, notification); 
        mStarted = true; 
       } 
      } 
     } 

    @Override 
     public void pause() { 
      LogHelper.d(TAG, "Calling stopForeground false"); 
      giveUpAudioFocus(); 
      mService.stopForeground(false); 
    } 

ログ:

03-25 08:50:40.200 19564-19564/? D/MusicService: Calling stopForeground false 
03-25 08:50:40.352 19564-19564/? D/MusicService: onCreate 
03-25 08:50:40.475 19564-19564/? D/MusicService: onStartCommand 
03-25 08:50:40.476 19564-19564/? D/MusicService: onStartCommand 

答えて

1

あなたはそれが自動的に再起動し、サービスを停止すると、あなたはSTART_STICKYを設定しているため。

この

は、Android DOCは、彼らがonStartCommand()から返された値に応じて、中に実行することを決定することができる操作の二つの追加の主要なモードがあります開始したサービスについては

を言うことである:START_STICKYがために使用されていますSTART_NOT_STICKYまたはSTART_REDELIVER_INTENTは、送信されたコマンドを処理している間だけ実行し続ける必要のあるサービスに対して使用されます。セマンティクスの詳細については、リンクされたドキュメントを参照してください。

stopSelf()を使用してください。

関連する問題