2017-05-07 1 views
0

J'utilise Android Mediaplayer pour lire des fichiers audio dans un fragment. Cependant, quand j'arrête un certain fichier audio puis le rejoue, une partie du son de la dernière pièce reste - La partie où je l'ai arrêtée. Pourquoi cela arrive-t-il?Android Mediaplayer: Certains (son) du fichier audio reste quand il est arrêté

public class PageFragment_Bon extends Fragment implements View.OnClickListener{ 

    public static final String ARG_PAGE = "ARG_PAGE"; 

    private int mPage; 
    private Button start, stop, replay; 
    private MediaPlayer mediaPlayer; 
    int [] filer = new int[18]; 


    public static PageFragment_Bon newInstance(int page) { 
     Bundle args = new Bundle(); 
     args.putInt(ARG_PAGE, page); 
     PageFragment_Bon fragment = new PageFragment_Bon(); 
     fragment.setArguments(args); 
     return fragment; 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     mPage = getArguments().getInt(ARG_PAGE); 
      } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_boenner, container, false); 

     start = (Button) view.findViewById(R.id.start); 
     start.setOnClickListener(this); 

     stop = (Button) view.findViewById(R.id.stop); 
     stop.setOnClickListener(this); 

     replay = (Button) view.findViewById(R.id.replay); 
     replay.setOnClickListener(this); 

     filer[2] = R.raw.takbira; 
     filer[4] = R.raw.alfatiha; 
     filer[14] = R.raw.tashahhud; 
     filer[15] = R.raw.salat; 
     filer[16] = R.raw.assalam; 

     if(filer[mPage] != 0){ 
      start.setVisibility(View.VISIBLE); 
      stop.setVisibility(View.VISIBLE); 
      replay.setVisibility(View.VISIBLE); 
     } 

     return view; 
    } 

    @Override 
    public void onPause() { 
     super.onPause(); 

     if(mediaPlayer != null) 
     { 
      mediaPlayer.stop(); 
     } 

    } 

    @Override 
    public void onClick(View v) { 

     if(mediaPlayer == null) 
      mediaPlayer = MediaPlayer.create(getActivity().getBaseContext(), filer[mPage]);//add this line 

     if(v == start){ 
       try { 
        mediaPlayer.start(); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
     } 

     else if(v == stop){ 
      mediaPlayer.pause(); 
     } 

     else if(v == replay){ 
      mediaPlayer.seekTo(0); 
      mediaPlayer.start(); 
     } 
    } 


    @Override 
    public void setUserVisibleHint(boolean isVisibleToUser) { 
     super.setUserVisibleHint(isVisibleToUser); 

     if(!isVisibleToUser){ 

      if(mediaPlayer!=null) { 
       if (mediaPlayer.isPlaying()) { 
        try { 
         mediaPlayer.stop(); 
         mediaPlayer.prepare(); 
        } catch (Exception e) { 
         e.printStackTrace(); 
        } 
        } 
       } 
      } 

     } 
    } 

Répondre

0

Vous devez utiliser mediaPlayer.reset() et mediaPlayer.release() après avoir appelé mediaPlayer.stop();

Votre code comme celui-ci,

mediaPlayer.stop(); 
mediaPlayer.reset(); 
mediaPlayer.release(); 
+0

Dans le cas (mediaPlayer.isPlaying())? Parce que ça ne marche pas. Maintenant, je ne peux plus jouer le même son – Hodhod

+0

Ensuite, vous devriez utiliser le service pour jouer du son. – Saim

+0

Ne devrais-je pas utiliser un service si je veux jouer le son en arrière-plan? Je n'ai pas besoin de ça – Hodhod