java - 如何在媒体播放器android ImageView 中实现完成监听器

标签 java android audio android-imageview android-mediaplayer

我正在开发当用户滑动浏览图像时播放背景音乐的项目。当用户到达最后一张图片时,音乐会停止。当用户后退时它也会开始播放。但是,我的歌曲很短,我想实现完成监听器,以便当第一首音乐结束时,第二首音乐从原始文件夹开始。我的主要问题是我不知道如何在我的 mainactivity.java 中实现它。我也阅读了 android 官方指南,但没有帮助。请提供一些帮助和解释...

我的代码如下

主 Activity .java

    import android.app.Activity;
    import android.content.Intent;
    import android.media.MediaPlayer;
    import android.os.Bundle;
    import android.support.v4.view.ViewPager;
    import android.support.v4.view.ViewPager.OnPageChangeListener;
    import android.view.Menu;

    import android.view.MenuItem;
    import android.widget.ShareActionProvider;

    public class MainActivity extends Activity {

        MediaPlayer oursong;
        ViewPager viewPager;
        ImageAdapter adapter;

        @Override
        public void onCreate(Bundle savedInstanceState) {
             super.onCreate(savedInstanceState);
             setContentView(R.layout.activity_main);

             oursong = MediaPlayer.create(MainActivity.this, R.raw.a);
             oursong.seekTo(0);
             oursong.start();

             viewPager = (ViewPager) findViewById(R.id.view_pager);
             adapter = new ImageAdapter(this);
             viewPager.setAdapter(adapter);


             viewPager.setOnPageChangeListener(MyViewPagerListener);
        }

        private ShareActionProvider mShareActionProvider;

        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
                // Inflate menu resource file.
                getMenuInflater().inflate(R.menu.activity_main, menu);

                // Locate MenuItem with ShareActionProvider
                MenuItem item = menu.findItem(R.id.menu_item_share);

                // Fetch and store ShareActionProvider
                mShareActionProvider = (ShareActionProvider) item.getActionProvider();
                // Return true to display menu
                return true;
        }

        // Call to update the share intent
        private void setShareIntent(Intent shareIntent) {
                if (mShareActionProvider != null) {
                        mShareActionProvider.setShareIntent(shareIntent);
                }
        }

        private int pos = 0;
        @Override
        protected void onPause() {
                super.onPause();

               if(oursong != null){
                   pos = oursong.getCurrentPosition();
                   oursong.release();
                   oursong = null;
                }
        }

        @Override
        protected void onResume(){
              super.onResume();
             oursong = MediaPlayer.create(MainActivity.this, R.raw.a);
             oursong.seekTo(pos); // You will probably want to save an int to restore here
             oursong.start();
        }


       private final OnPageChangeListener MyViewPagerListener = new OnPageChangeListener() {

                @Override
                public void onPageSelected(int pos) {
                  if (pos == adapter.getCount() - 1){
                     // adding null checks for safety
                     if(oursong != null){
                        oursong.pause();
                     }

                   } else if (!oursong.isPlaying()){ 

                    // adding null check for safety
                    if(oursong != null){
                        oursong.start();
                    }
                  }         
                }

                @Override
                public void onPageScrolled(int arg0, float arg1, int arg2) {
                 // TODO Auto-generated method stub

                }

                @Override
                public void onPageScrollStateChanged(int arg0) {
                // TODO Auto-generated method stub

                }
            };

     }

最佳答案

您必须在 mediaplayer 实例上设置完成监听器以确定歌曲已播放

 mP.setOnCompletionListener(new OnCompletionListener() {
    @Override
    public void onCompletion(MediaPlayer mp) {
        try {

            mp.start();
            mp.setLooping(true);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
});

关于java - 如何在媒体播放器android ImageView 中实现完成监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25592534/

相关文章:

java - 如何在不同字段/键上的查询中使用缓存?

android - 从 Textview 获取值(value)

audio - Tone.js:如何无缝循环播放声音?

qt - 为什么麦克风关闭时基本频率和幅度不为零?

java - DataNucleus + JDO : Retrieve an object with Composite Key (error:NoSuchElementException)

java - 如何在hadoop中将InputStream数据设置为FSDataInputStream

java - 试图从 ListView 中的 TextView 中获取值 android 中的单击事件

java - android用arraylist值填充singlechoiceitems对话框

algorithm - 通过分析音频频谱进行节奏检测

java - 无法在 AsyncTask 的 onPostExecute 方法上显示 Toast 或 AlertDialog