微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在视图寻呼机中停止媒体播放器声音?

如何解决如何在视图寻呼机中停止媒体播放器声音?

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


解决方法

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

,

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。