2017-05-07 8 views
0

Android Media Playerを使用して、一部のオーディオファイルをフラグメントで再生しています。ただし、特定のオーディオファイルを停止してからもう一度再生すると、最後の再生音の一部が残っています。なぜこうなった?Android Mediaplayer:オーディオファイルの一部(サウンド)が停止しても残ります

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(); 
        } 
        } 
       } 
      } 

     } 
    } 

答えて

0

あなたは、このようなmediaPlayer.stop();

あなたのコードを呼び出した後であれば(mediaPlayer.isPlaying())では

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

mediaPlayer.reset()mediaPlayer.release()を使用する必要がありますか?原因は動作しません。今私は再び同じ音を再生することはできません – Hodhod

+0

その後、サービスを使用してサウンドを再生する必要があります。 – Saim

+0

サウンドをバックグラウンドで再生したい場合は、サービスを使用しないでください。私はそれを必要としない – Hodhod

関連する問題