2017-05-06 7 views
0

私は18ページの断片を持つ活動をしています。一部のページでは、再生ボタンをクリックしたときに再生できるサウンドがあります。ただし、ユーザーが再生ボタンをクリックして別のページに切り替えると、前のページのサウンドはまだ再生されています。関連するページだけではどのように再生され、ページが切り替わると停止するのですか?Android:異なるフラグメントページでサウンドを開始/停止する方法を制御する方法は?

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.Hello; 
     filer[4] = R.raw.Welcome; 
     filer[14] = R.raw.Intro; 
     filer[15] = R.raw.Farewell; 
     filer[16] = R.raw.Leave; 

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

     return view; 
    } 

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

     if(mediaPlayer != null) 
     { 
      mediaPlayer.seekTo(0); 
      mediaPlayer.start(); 
     } 

    } 

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

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

    } 

    @Override 
    public void onClick(View v) { 

     if(mediaPlayer == null) 
      mediaPlayer = MediaPlayer.create(getActivity().getBaseContext(), filer[mPage]); 
     if(v == start){ 
      mediaPlayer.start(); 
     } 

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

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


    } 
+0

あなたがページで何を意味するのですか? ViewPagerを使用していますか? –

+0

私はFragmentPagerAdapterを使用しています –

答えて

0

あなたが持っているあなたの破片の内側にこのような何かを試すことができますが、あなたのFragmentsetUserVisibleHintをオーバーライドする

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

    if(!isVisibleToUser){ 

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

    } 
} 

を鳴らし、あなたは断片が見えるようになり

編集

を決定することができます

tryとcatchを使ってメディアプレーヤーを起動する(excepがある場合

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

サウンドを停止しますが、ページに戻って開始ボタンをクリックするともう起動しません –

+0

@ Mr.Tログを確認してcatchブロックから例外がないかどうか確認してください試してあなたのメディアプレーヤーを起動することを忘れないでください –

+0

はい:java.io.IOException:デバイスキーの応答が無効です。 –

0

フラグメントのonPause()とonResume()をオーバーライドする方がよいでしょう。メディアプレーヤーの現在の位置を保存する必要があります。だから、私はメディアプレーヤーの位置を保存するために、共有の設定を使用しています。
onCreateViewでは、 mediaPlayer_position = getActivity()。getSharedPreferences( "PLAY_PAUSE"、Activity.MODE_PRIVATE).getInt( "CHECK_PLAY_PAUSE"、0);

@Override 
public void onResume() { 
    super.onResume(); 
    int position = getActivity().getSharedPreferences("PLAY_PAUSE", Activity.MODE_PRIVATE).getInt("CHECK_PLAY_PAUSE", 0); 
    if(position > 0) { 
     try { 
      mediaPlayer.setDataSource(mp3_link);//mp3_link from url to MediaPlayer data source 
      mediaPlayer.prepare(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     mediaPlayer.seekTo(position); 
     mediaPlayer.start(); 

    } 

} 

@Override 
public void onPause() { 
    super.onPause(); 
    if(mediaPlayer.isPlaying()) { 
     mediaPlayer_position = mediaPlayer.getCurrentPosition(); 
     getActivity().getSharedPreferences("PLAY_PAUSE", Context.MODE_PRIVATE).edit().putInt("CHECK_PLAY_PAUSE", mediaPlayer_position).apply(); 
     mediaPlayer.pause(); 
    } 

} 

参考: "https://www.hrupin.com/2011/02/example-of-streaming-mp3-mediafile-with-android-mediaplayer-class"

関連する問題