【问题标题】:How to stop media player sound in view pager?如何在视图寻呼机中停止媒体播放器声音?
【发布时间】:2021-06-08 19:39:14
【问题描述】:

我是 Android 开发新手,我的活动中有滑块片段。我正在尝试为不同的滑块播放不同的声音。但是,当我从一页滑到另一页时,声音是重叠的。任何人都可以帮助我们吗?这是我的代码:

public class Diabetes1 extends Fragment {
       MediaPlayer mp;
       View rootView;

       @Override
       public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                         Bundle savedInstanceState) {
            rootView = inflater.inflate(R.layout.slidertopimagecardlayout, container, false);
            SharedPreferences prefs = this.getActivity().getSharedPreferences("MY_LANGUAGE", MODE_PRIVATE);
            if (prefs.getString("myLanguage", "").equals("en")) {
                mp = MediaPlayer.create(getActivity().getBaseContext(), getResources().getIdentifier("diab1en", "raw", this.getActivity().getPackageName()));
                mp.start();
            } else if (prefs.getString("myLanguage", "").equals("es")) {
                mp = MediaPlayer.create(getActivity().getBaseContext(), getResources().getIdentifier("diab1en", "raw", this.getActivity().getPackageName()));
                mp.start();
            }
            return rootView;
       }

       @Override
       public void setUserVisibleHint(boolean isVisibleToUser) {
            super.setUserVisibleHint(isVisibleToUser);
            // Make sure that we are currently visible
            if (this.isVisible()) {
                // If we are becoming invisible, then...
                if (!isVisibleToUser) {
                    mp.stop();
                } else {
                    // do what you like
                }
            }
       }

       @Override
       public void onPause() {
            super.onPause();
            if(mp.isPlaying()) {
                  mp.stop();
            }
       }

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


【问题讨论】:

    标签: android-studio android-fragments android-viewpager media-player onpause


    【解决方案1】:

    Viewpager 不适合您的目的,因为它会为页面之间的快速转换创建屏幕外片段。对于您的问题,每个都调用了 onCreateView,但没有调用 onPause。要处理此问题,您可以将 pageChangeListener 与 pagerAdapter 一起使用。每次页面更改后,您可以切换到另一种声音并停止当前声音。为此,您必须从页面片段中提取媒体播放器逻辑。

    【讨论】:

      【解决方案2】:

      试试这段代码,看看它是否有效

      public class Diabetes1 extends Fragment {
             MediaPlayer mp;
             View rootView;
             Boolean isPLaying = false;
      
             @Override
             public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                               Bundle savedInstanceState) {
                  rootView = inflater.inflate(R.layout.slidertopimagecardlayout, container, false);
                  SharedPreferences prefs = this.getActivity().getSharedPreferences("MY_LANGUAGE", MODE_PRIVATE);
                  if (prefs.getString("myLanguage", "").equals("en")) {
                      mp = MediaPlayer.create(getActivity().getBaseContext(), getResources().getIdentifier("diab1en", "raw", this.getActivity().getPackageName()));
                      mp.start();
                      isPLaying = true;
                  } else if (prefs.getString("myLanguage", "").equals("es")) {
                      mp = MediaPlayer.create(getActivity().getBaseContext(), getResources().getIdentifier("diab1en", "raw", this.getActivity().getPackageName()));
                      mp.start();
                      isPLaying = true;
                  }
                  return rootView;
             }
      
             @Override
             public void setUserVisibleHint(boolean isVisibleToUser) {
                  super.setUserVisibleHint(isVisibleToUser);
                  // Make sure that we are currently visible
                  if (this.isVisible()) {
                      // If we are becoming invisible, then...
                      if (!isVisibleToUser) {
                          mp.stop();
                      } else {
                          // do what you like
                      }
                  }
             }
      
             @Override
             public void onPause() {
                  super.onPause();
                  if(isPlaying) {
                        mp.stop();
                        isPLaying = false;
                  }
             }
      
             @Override
             public void onResume() {
                  super.onResume();
             }
      }
      

      【讨论】:

      • 我试过这个..但我得到了同样的错误
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-14
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多