java - Android:如何从 fragment 中的主动行为中获取媒体播放器对象?

标签 java android audio android-fragments navigation-drawer

我正在开发一个 Android 应用程序,并且正在使用 NavigationDrawer,只有一个 Activity (MainActivity) 和 Fragments。 我在 ActionBar 上有一个 radio 直播按钮,所以我在 MainActivity 中为直播按钮创建了一个 MediaPlayer 对象,并且工作正常,现在我在其中一个 fragment 中有一些声音文件,我想获取我在 MainActivity 中创建的 mediaPlayer 对象以便使用它。请注意,实时流按钮始终在应用程序顶部可见,因此,如果我处于包含声音文件的 fragment 中,我希望能够收听该声音文件,如果我单击实时流按钮,则声音文件将暂停,实时流将开启。

这是我的代码: 这是MainActivity(仅相关部分):

public class MainActivity extends ActionBarActivity {

   private static final String RADIO_STREAM_URL= "http://198.178.123.23:8662/stream/1/;listen.mp3";
   MediaPlayer mediaPlayer;
   @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);
       mediaPlayer = new MediaPlayer();
       mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
       try {
           mediaPlayer.setDataSource(RADIO_STREAM_URL);
       } catch (IOException e) {
           e.printStackTrace();
       }

       return true;
   }
   @Override
   public boolean onOptionsItemSelected(MenuItem item) {

    if (item != null )
    {
        if(item.getItemId() == android.R.id.home){
            if (mDrawerLayout.isDrawerOpen(Gravity.END)){
                mDrawerLayout.closeDrawer(Gravity.END);
            } else {
                mDrawerLayout.openDrawer(Gravity.END);
            }
        }else if(item.getItemId() == R.id.action_settings){
            try {
                mediaPlayer.prepareAsync();
            } catch (IllegalStateException e) {
                e.printStackTrace();
            }


            mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                @Override
                public void onPrepared(MediaPlayer mediaPlayer) {
                    if(mediaPlayer.isPlaying()){
                        mediaPlayer.stop();
                        Log.e("ANA Radio","was playing");
                    }else{
                        Log.e("ANA Radio","was not playing");

                        mediaPlayer.start();
                    }
                }
            });
        }

    }
    return false;
}

现在如何获取 Fragment 中的 mediaPlayer 对象?

最佳答案

这里试试这个: 在您的 fragment 中,您可以编写以下代码来获取 MediaPlayer 对象:

((MainActivity)getActivity()).mediaPlayer

关于java - Android:如何从 fragment 中的主动行为中获取媒体播放器对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28901177/

相关文章:

java - 使用 Java 8 将 long 列表转换为可迭代的整数

java - 延迟行动

android - 如何在 Xamarin.Forms 中制作具有通用页眉和页脚的轮播页面

android - 不能同时处理点击和触摸事件

c# - UWP MediaPlayerElement播放音频两次

jquery - 将OnClick Stop添加到音频

java - 静音和取消静音按钮? (仍然需要一个答案)

java - 验证 Gherkin 功能文件

java - 为什么 httpServletRequest.getLocalPort 总是返回与 getServerPort 相同的值?

java - 通过 Streams 在 double 组上调用构造函数