Android Mediaplayer Stop and Play

Mediaplayer Stops playing

Look at this one it is the same case for you.

Link

but i think it is something else at your case.

Android MediaPlayer Stop and Play

You should use only one mediaplayer object

    public class PlayaudioActivity extends Activity {

private MediaPlayer mp;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button b = (Button) findViewById(R.id.button1);
Button b2 = (Button) findViewById(R.id.button2);
final TextView t = (TextView) findViewById(R.id.textView1);

b.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
stopPlaying();
mp = MediaPlayer.create(PlayaudioActivity.this, R.raw.far);
mp.start();
}

});

b2.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
stopPlaying();
mp = MediaPlayer.create(PlayaudioActivity.this, R.raw.beet);
mp.start();
}
});
}

private void stopPlaying() {
if (mp != null) {
mp.stop();
mp.release();
mp = null;
}
}
}

How to play, stop, and then play again with MediaPlayer

According to the documentation, stop() puts the MediaPlayer in a "Stopped" state. Calling start() is not allowed in this state, hence the exception.

The only way to play again from this state is to call prepare or prepareAsync, wait for onPrepared, and finally call start().

In contrast, you can pause() and start() repeatedly.

Since you are playing audio only, it might make sense to replace:

 mp.stop();
mp.release();

with:

 mp.pause();
mp.seekTo(0);

Edit:

I noticed your PlayAudio creates a new instance of MediaPlayer. If you use the above solution with pause, you should create the MediaPlayer once (for example in onStarted) and not release it until onStopped.

how to stop MediaPlayer correctly?

You need to release media player using mediaPlayer.release(). If MediaPlayer is not playing any song/audio you shouldn't stop MediaPlayer. See below code for more help.

private void releaseMediaPlayer() {
try {
if (mediaPlayer != null) {
if (mediaPlayer.isPlaying())
mediaPlayer.stop();
mediaPlayer.release();
mediaPlayer = null;
}
} catch (Exception e) {
e.printStackTrace();
}
}

Android Media Player play/pause Button

You could use simple if-check to handle the pausing. Try this:

if(mPlayer.isPlaying()){
mPlayer.pause();
} else {
mPlayer.start();
}

How to stop mediaplayer which continues to play after closing the activity

Create a method in the adapter :

public class CustomMusicAdapter extends RecyclerView.Adapter<MyViewHolder> implements Filterable {

private Context context;
private int layout;
private ArrayList<Music> myArraylist;
private ArrayList<Music> getUserModelListFiltered;
private static MediaPlayer mediaPlayer;
private boolean flag=true;

public CustomMusicAdapter(Context context, int custom_music_row, ArrayList<Music> myArraylist) {
this.context = context;
this.layout = layout;
this.getUserModelListFiltered = myArraylist;
this.myArraylist = myArraylist;

}

public release(){
mediaPlayer.stop();
mediaPlayer.release();
}

@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
final View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.custom_music_row, parent, false);
return new MyViewHolder(itemView);
}

@SuppressLint("RecyclerView")
@Override
public void onBindViewHolder(@NonNull final MyViewHolder holder, final int position) {
holder.setIsRecyclable(false);

final Music music = myArraylist.get(position);
holder.mTitle.setText(music.getName());
holder.mDes.setText(music.getSinger());

//Play Music Setup
holder.mImageaplay.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {

if (flag){
mediaPlayer=MediaPlayer.create(context,music.getSong());
flag=false;
}
if (mediaPlayer.isPlaying()){
mediaPlayer.pause();
mediaPlayer.start();
holder.mImageaplay.setImageResource(R.drawable.ic_play);
}else {
mediaPlayer.start();
holder. mImageaplay.setImageResource(R.drawable.ic_pause);
}
mediaPlayer.start();

}
});

// stop player
holder.mImageStop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (!flag){
mediaPlayer.stop();
mediaPlayer.release();
flag=true;
}
holder.mImageaplay.setImageResource(R.drawable.ic_play);
}
});

}

@Override
public int getItemCount() {
return myArraylist.size();
}

@Override
public Filter getFilter() {

Filter filter = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence charSequence) {
FilterResults filterResults = new FilterResults();
if (charSequence == null | charSequence.length() == 0){
filterResults.count = getUserModelListFiltered.size();
filterResults.values = getUserModelListFiltered;
}else {
String searchChr = charSequence.toString().toLowerCase();
List<Music> resultData = new ArrayList<>();
for (Music music: getUserModelListFiltered){
if (music.getName().toLowerCase().contains(searchChr)){
resultData.add(music);
}
}
filterResults.count = resultData.size();
filterResults.values = resultData;
}
return filterResults;
}

@Override
protected void publishResults(CharSequence charSequence, FilterResults filterResults) {

myArraylist = (ArrayList<Music>) filterResults.values;
notifyDataSetChanged();

}
};
return filter;
}

public class ViewHolder {
TextView textView_SongName, textView_artist;
ImageView imageView_play, imageView_stop;
private View convertview;
LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);

public ViewHolder() {
convertview = layoutInflater.inflate(layout, null);
textView_SongName = convertview.findViewById(R.id.textName);
textView_artist = convertview.findViewById(R.id.txtSinger);
imageView_play = convertview.findViewById(R.id.ivPlay);
imageView_stop = convertview.findViewById(R.id.ivStop);

}
}
}

override activity onDestroy() method

 public class Tip1Activity extends AppCompatActivity {
private ArrayList<Music> arrayList;
private CustomMusicAdapter adapter;
private RecyclerView recyclerView;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tip1);



Button button1 = (Button)findViewById(R.id.mainButton1);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(Tip1Activity.this, MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
Toast.makeText(Tip1Activity.this, "songs!", Toast.LENGTH_SHORT).show();
}
});



getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

recyclerView = findViewById(R.id.recyclerViewList);

arrayList = new ArrayList<>();
arrayList.add(new Music("001 Veni, veni, Emmanuel", "SONGS OF WORSHIP", R.raw.veni_emmanuel));
arrayList.add(new Music("002 O come. O come Emmanuel", "SONGS OF WORSHIP", R.raw.o_come_emmanuel));
arrayList.add(new Music("003 Savior of the nations, come", "SONGS OF WORSHIP", R.raw.savior_of_nations));
arrayList.add(new Music("004 On Jordan's bank the Baptist's cry", "SONGS OF WORSHIP", R.raw.on_jordans_bank));
arrayList.add(new Music("005 Lo, he comes", "SONGS OF WORSHIP", R.raw.lo_he_comes));
arrayList.add(new Music("006 O Word that goest forth on high", "SONGS OF WORSHIP", R.raw.o_word_that_goes_forth));
arrayList.add(new Music("007 Wake, awake", "SONGS OF WORSHIP", R.raw.wake_awake));
arrayList.add(new Music("008 Rorate caeli", "SONGS OF WORSHIP", R.raw.rorate_caeli));
arrayList.add(new Music("009 Conditor alme siderum", "SONGS OF WORSHIP", R.raw.conditor_alme_siderum));
arrayList.add(new Music("010 Creator of the stars of night", "SONGS OF WORSHIP", R.raw.creator_of_the_stars));



adapter = new CustomMusicAdapter(this, R.layout.custom_music_row, arrayList);
recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setHasFixedSize(false);

}



onDestroy() {
if( adapter !=null ){
adapter.release()
}
}

@Override
public void onBackPressed() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Do you want to close Catholic Mass Songs App?")
.setCancelable(false)
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
Tip1Activity.this.finish();
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
AlertDialog alert = builder.create();
alert.show();

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_options, menu);

MenuItem menuItem = menu.findItem(R.id.search_view);

SearchView searchView = (SearchView) menuItem.getActionView();

searchView.setMaxWidth(Integer.MAX_VALUE);

searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}

@Override
public boolean onQueryTextChange(String newText) {

adapter.getFilter().filter(newText);
return true;
}
});



return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){

case R.id.item1:
Toast.makeText(this, "Settings Selected", Toast.LENGTH_SHORT).show();
startActivity(new Intent(this, Main2Activity.class));
return true;

//do more funtionality here




default:
return super.onOptionsItemSelected(item);
}

}
}


Related Topics



Leave a reply



Submit