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
Have Both Gms and Hms in the Project
How Do Android Screen Coordinates Work
How to Create Edittext with Cross(X) Button at End of It
How to Know When an Edittext Loses Focus
Imageview Be a Square with Dynamic Width
How to Add a Line Break in an Android Textview
Android: Viewpager and Horizontalscrollview
Viewpager with Google Maps API V2: Mysterious Black View
Android: How to Overlay a Bitmap and Draw Over a Bitmap
Android - Drawable with Rounded Corners at the Top Only
Setuservisiblehint Called Before Oncreateview in Fragment
Emulator Error: This Avd's Configuration Is Missing a Kernel File
How to Determine If Network Type Is 2G, 3G or 4G
Change Toolbar Color in Appcompat 21
Background-Attachment:Fixed Not Working - Android Chrome (V40)
How to Download the Android Sdk Without Downloading Android Studio