如何在启动其他活动后再次停止已经运行的媒体播放器并通过按钮启动该活动?



我有一个语音应用程序,当我打开声音并转到另一个活动并返回到播放声音的活动时,我想通过按站立按钮关闭当前声音 发生的错误是,当我退出活动并返回并按下停止按钮时,再次打开声音,第一个声音继续,我只想停止第一个声音

package com.yasser.relaxandsleepsounds.ui.home.innerfragment.homeactivity;
import android.content.Context;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil;
import com.yasser.relaxandsleepsounds.R;
import com.yasser.relaxandsleepsounds.databinding.ActivityRainpianoBinding;
public class RainpianoActivity extends AppCompatActivity {
//private MediaPlayer mMediaPlayer;
Context context;
Button start,stop;
private  MediaPlayer mMediaPlayer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature ( Window.FEATURE_NO_TITLE );
getWindow ().setFlags ( WindowManager.LayoutParams.FLAG_FULLSCREEN,  
WindowManager.LayoutParams.FLAG_FULLSCREEN );
//  setContentView(R.layout.layout.activity_rainpiano);
final ActivityRainpianoBinding binding= DataBindingUtil.setContentView (this, 
R.layout.activity_rainpiano );
// hid action bar
ActionBar actionBar = getSupportActionBar ();
assert actionBar != null;
actionBar.hide ();
binding.bbbb.setBackgroundResource(R.drawable.river_in_theforest);
mMediaPlayer = MediaPlayer.create ( RainpianoActivity.this,R.raw.rain_light );
mMediaPlayer.setLooping ( true );
// rainpianoViewModel.getmAlwanarRecourceID();
binding.play.setOnClickListener ( new View.OnClickListener () {
@Override
public void onClick(View v) {
if ( mMediaPlayer.isPlaying()){
mMediaPlayer.pause ();
binding.play.setBackground ( getResources ().getDrawable ( R.drawable.play8 ) );
}else {
mMediaPlayer.start();
binding.play.setBackground ( getResources ().getDrawable ( R.drawable.pause8 ) );
}
}
} );
}
}

我找到了解决方案 构建服务 Java 类

package com.yasser.relaxandsleepsounds;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;
import androidx.annotation.Nullable;
public class MyService extends Service {
private  MediaPlayer mMediaPlayer,mMediaPlayer1;
Context context;
private static boolean isRunning;
public static boolean isRunning() {
return isRunning;
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// return super.onStartCommand(intent, flags, startId);
// mMediaPlayer = MediaPlayer.create ( context,R.raw.rain_light );
mMediaPlayer = MediaPlayer.create ( this,R.raw.rain_light );
mMediaPlayer1 = MediaPlayer.create ( this,R.raw.forest_fire );
mMediaPlayer.setLooping ( true );
mMediaPlayer1.setLooping ( true );
mMediaPlayer.start ();
mMediaPlayer1.start ();
isRunning = true;
return START_STICKY;
}

@Override
public void onDestroy() {
super.onDestroy();
mMediaPlayer.stop();
mMediaPlayer1.stop();
isRunning = false;
}
}

和像这样的主要活动

package com.yasser.relaxandsleepsounds.ui.home.innerfragment.homeactivity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil;
import com.yasser.relaxandsleepsounds.MyService;
import com.yasser.relaxandsleepsounds.R;
import com.yasser.relaxandsleepsounds.databinding.ActivityRainpianoBinding;
import static com.yasser.relaxandsleepsounds.MyService.isRunning;
public class RainpianoActivity extends AppCompatActivity {
//private MediaPlayer mMediaPlayer;
Context context;
Button start,stop,play;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature ( Window.FEATURE_NO_TITLE );
getWindow ().setFlags ( WindowManager.LayoutParams.FLAG_FULLSCREEN,  
WindowManager.LayoutParams.FLAG_FULLSCREEN );
//  setContentView(R.layout.layout.activity_rainpiano);
final ActivityRainpianoBinding binding= DataBindingUtil.setContentView (this, 
R.layout.activity_rainpiano );
// hid action bar
ActionBar actionBar = getSupportActionBar ();
assert actionBar != null;
actionBar.hide ();
binding.bbbb.setBackgroundResource(R.drawable.river_in_theforest);
final Button start = (Button)findViewById(R.id.play);
final Button stop = (Button)findViewById(R.id.pause);
if(isRunning()){
start.setVisibility(View.INVISIBLE);
stop.setVisibility(View.VISIBLE);
}else {
stop.setVisibility(View.INVISIBLE);
start.setVisibility(View.VISIBLE);
}
start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startService(new Intent(RainpianoActivity.this, MyService.class));
start.setVisibility(View.INVISIBLE);
stop.setVisibility(View.VISIBLE);
}
});
stop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
stopService(new Intent(RainpianoActivity.this, MyService.class));
stop.setVisibility(View.INVISIBLE);
start.setVisibility(View.VISIBLE);

}
});
}
}