2017-11-24 1 views
0

通知のクリックを停止したいという拘束されたサービスがあります。私main_activityでサービスが破棄された後に再生されるメディアプレーヤー

私は私のサービスをアンバインドするために、このonDestroyの操作を行います。私はmediaPlayerBoundが真実であることを取得し、そのサービスが結合していないなっているよう

public void onDestroy(){ 
     super.onDestroy(); 
     if(mediaPlayerBound){ 
       System.out.println(mediaPlayerBound); 
       unbindService(mServCon); 
       mMediaPlayerServiceBound = false; 
     } 

この部分は正常に動作します。

その後、私のサービスで: 私は放送を受信した後、以下を呼び出します。

最後
stopForeground(true); 
stopSelf(); 

:私が使用してサービス内OnDestroyで

public void onDestroy(){ 
    this.unregisterReceiver(nextBroadCast); 
    System.out.println("Stopped Service"); 
    } 

は今、私の質問は、私はメディアプレーヤで曲を演奏し始めたが、それは私が確認を得た後も持続する、ありますそのサービスはonDestroyに達したということです。 stopSelf()を呼び出すと直ちに再生を停止するにはどうすればよいですか? ?

答えて

0

サービスでは、あなたがいつもonDestroyedが呼び出されているとは限りません。多くの利用規約があります。しかし、あなたがこのイベントを受けていると言ったので、以下のコードを試してみてください。私はあなたのメディアプレーヤーのインスタンスを取得することができると思います。ここに回避策があります

@Override 
public void onDestroy() { 
super.onDestroy(); 
this.unregisterReceiver(nextBroadCast); 
yourMediaPlayer= MediaPlayer.create(x.this,R.raw.sound); 
if(yourMediaPlayer.isPlaying()) 
{ 
    yourMediaPlayer.stop(); 
    yourMediaPlayer.release(); 
} 
} 
0

ちょっとした注意点は、MediaPlayerを使って音楽を再生した場合、MediaPlayerを停止することです。

このソースをDestroy()に配置します。

private void stopPlay() { 
    this.unregisterReceiver(nextBroadCast); 
    if (mediaPlayer != null) { 
     if (mediaPlayer.isPlaying()) { 
      mediaPlayer.stop(); 
     } 
     mediaPlayer.release(); 
     mediaPlayer = null; 
    } 
} 
0

このコードをサービスファイルに追加してください。あなたのアプリは、あなたがサービスをruningて停止したいとき、それは

@Override 
public void onTaskRemoved(Intent rootIntent) { 
    super.onTaskRemoved(rootIntent); 
if(player.isPlaying()) 
{ 
    player.stop(); 
} 

    player.release(); 

    stopSelf(); 
} 


@Override 
public void onDestroy() { 
if(player.isPlaying()) 
{ 
    player.stop(); 
} 

    player.release(); 
    stopSelf(); 

} 

とあなたの活動場所のコード内のサービス

を停止closing.soあるとき onTaskRemovedは呼び出しです。

Intent i=new Intent(this, MediaSongServiece.class); 
    stopService(i); 
関連する問題