1
My problem is this: I have an Android application that runs a Player, containing a "play" button, after the click appears "stop" and performs the sound.
Works in a Navigation Drawer, so far so good and runs right, when I open another screen through the side menu and I open the player again, the button appears again "play", and if I click again on "play" starts to play another simultaneous sound, which was actually for the button "stop" is visible so you can stop playing. Someone has been through this and has the solution?`
Mainactivity.java
package com.teste.com.myapplication;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.design.widget.NavigationView;
import android.support.v4.app.NavUtils;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.content.Intent;
public class MainActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener, FragmentoRadio.OnFragmentInteractionListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.setDrawerListener(toggle);
toggle.syncState();
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
}
@Override
public void onBackPressed() {
//Configuração do botão Voltar
Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
return super.onOptionsItemSelected(item);
}
@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
boolean FragmentTransaction = false;
Fragment fragment = null;
if (id == R.id.nav_radio) {
// Handle the camera action
Intent upIntent = NavUtils.getParentActivityIntent(this);
fragment = new FragmentoRadio();
FragmentTransaction = true;
} else if (id == R.id.nav_gallery) {
} else if (id == R.id.nav_slideshow) {
} else if (id == R.id.nav_manage) {
} else if (id == R.id.nav_share) {
} else if (id == R.id.nav_send) {
}
if(FragmentTransaction) {
getSupportFragmentManager().beginTransaction()
.replace(R.id.content_main, fragment)
.commit();
item.setChecked(true);
getSupportActionBar().setTitle(item.getTitle());
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
@Override
public void onFragmentInteraction(Uri uri) {
}
}
Fragmentary
package com.teste.com.myapplication;
import android.content.Context;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ToggleButton;
import java.io.IOException;
/**
* A simple {@link Fragment} subclass.
* Activities that contain this fragment must implement the
* {@link FragmentoRadio.OnFragmentInteractionListener} interface
* to handle interaction events.
*/
public class FragmentoRadio extends Fragment {
private ToggleButton playPauseButton;
private String STREAM_URL = "http://173.236.30.162:8119";
private OnFragmentInteractionListener mListener;
private MediaPlayer mp;
private View view;
public FragmentoRadio() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
mp = new MediaPlayer();
view = inflater.inflate(R.layout.fragmento_radio, container, false);
playPauseButton = (ToggleButton) view.findViewById(R.id.playPauseButton);
playPauseButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Perform action on clicks
if (playPauseButton.isChecked()) { // Checked - Pause icon visible
playPauseButton.setBackgroundResource(R.drawable.layout_button_stop);
mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
try {
mp.reset();
mp.setDataSource(STREAM_URL);
mp.prepareAsync();
mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.start();
}
});
} catch (IOException e) {
e.printStackTrace();
}
} if (mp.isPlaying() == true){ // Unchecked - Play icon visible
playPauseButton.setBackgroundResource(R.drawable.layout_button_play);
if (playPauseButton.isChecked()){
}else{
mp.stop();
}
}
}
});
return view;
}
// TODO: Rename method, update argument and hook method into UI event
public void onButtonPressed(Uri uri) {
if (mListener != null) {
mListener.onFragmentInteraction(uri);
}
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
if (context instanceof OnFragmentInteractionListener) {
mListener = (OnFragmentInteractionListener) context;
} else {
throw new RuntimeException(context.toString()
+ " must implement OnFragmentInteractionListener");
}
}
@Override
public void onDetach() {
super.onDetach();
mListener = null;
}
/**
* This interface must be implemented by activities that contain this
* fragment to allow an interaction in this fragment to be communicated
* to the activity and potentially other fragments contained in that
* activity.
* <p/>
* See the Android Training lesson <a href=
* "http://developer.android.com/training/basics/fragments/communicating.html"
* >Communicating with Other Fragments</a> for more information.
*/
public interface OnFragmentInteractionListener {
// TODO: Update argument type and name
void onFragmentInteraction(Uri uri);
}
}
Layout
fragment radio
<!-- TODO: Update blank fragment layout -->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/background"
android:id="@+id/content_main"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="com.teste.myapplication.MainActivity"
tools:showIn="@layout/app_bar_main">
<ToggleButton
android:layout_width="210dp"
android:layout_height="210dp"
android:background="@drawable/layout_button_play"
android:layout_weight="0.42"
android:layout_alignWithParentIfMissing="false"
android:id="@+id/playPauseButton"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="47dp"
android:textOff=" "
android:textOn=" "/>
</RelativeLayout>
Dear friend, thank you very much for your attention, I will carry out these procedures and I will return with the result.
– Gerson Santos
I implemented the Media Player via Service and everything went well.
– Gerson Santos