【问题标题】:Playing audio file in android在android中播放音频文件
【发布时间】:2013-07-01 05:44:46
【问题描述】:

我遇到了一个要求,我需要在 android 中播放媒体文件。我将发布页面的屏幕截图

实际需求是用户想要播放他的录音列表中的音频文件。录音列表通过列表适配器显示。我想在同一页面上显示音频文件的播放进度(如屏幕所示拍摄)。

我正在粘贴我尝试过的代码。

public class RecordingActivity extends ListActivity implements MediaPlayerControl {
    MediaPlayer mMediaPlayer;
    MediaController mMediaController;
    Handler mHandler;
    String OUTPUT_FILE;
    RelativeLayout rl; 
    Context context = null;
    Point p;
    static final String[] recordings = new String[] {"Example1","Example2",
            "Example3","Example4","Example5" };

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setListAdapter(new FirstAdapter(this, recordings));
        }

    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {

        showPopup(RecordingActivity.this, p); 
        // get selected items
        mMediaPlayer = new MediaPlayer();
        mMediaController = new MediaController(this);
        mHandler = new Handler();
        mMediaController.setMediaPlayer(RecordingActivity.this);
        OUTPUT_FILE = Environment.getExternalStorageDirectory()+"/recorder.mp3";
        try{
        mMediaPlayer.setDataSource(OUTPUT_FILE);
        mMediaPlayer.prepare();

        }
        catch(Exception e){


        }
        mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {

            @Override
            public void onPrepared(MediaPlayer mp) {
                 mHandler.post(new Runnable() {
                     public void run() {
                       mMediaController.show(10000);
                       mMediaPlayer.start();
                       mMediaController.setEnabled(true);
                     }
             });            
            }
        });
    }
    private void showPopup(final Activity context, Point p) {
       int popupWidth = 200;
       int popupHeight = 150;
     // Inflate the popup_layout.xml
       RelativeLayout viewGroup = (RelativeLayout) context.findViewById(R.id.reviewlist);
       LayoutInflater layoutInflater = (LayoutInflater) context
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
       View layout = layoutInflater.inflate(R.layout.activity_play, viewGroup);
     // Creating the PopupWindow
       final PopupWindow popup = new PopupWindow(context);
       popup.setContentView(layout);
       popup.setWidth(popupWidth);
       popup.setHeight(popupHeight);
       popup.setFocusable(true);
       // Some offset to align the popup a bit to the right, and a bit down, relative to button's position.
       int OFFSET_X = 30;
       int OFFSET_Y = 30;
       // Clear the default translucent background
       popup.setBackgroundDrawable(new BitmapDrawable());
       // Displaying the popup at the specified location, + offsets.
       popup.showAtLocation(layout, Gravity.NO_GRAVITY,p.x+OFFSET_X,p.y+OFFSET_Y);
       // Getting a reference to Close button, and close the popup when clicked.
       ImageButton close = (ImageButton) layout.findViewById(R.id.close);
       Button b1 =(Button) layout.findViewById(R.id.button1);
       Button b2 =(Button) layout.findViewById(R.id.button2);
       close.setOnClickListener(new OnClickListener() {
       @Override
       public void onClick(View v) {
          popup.dismiss();
        }
       });
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mMediaPlayer.stop();
        mMediaPlayer.release();
    }




 @Override
    public boolean canPause() {
        return true;
    }

    @Override
    public boolean canSeekBackward() {
        return false;
    }

    @Override
    public boolean canSeekForward() {
        return false;
    }

    @Override    
    public int getBufferPercentage() {
        int percentage = (mMediaPlayer.getCurrentPosition() * 100) / mMediaPlayer.getDuration();
        return percentage;
    }

    @Override
    public int getCurrentPosition() {
        return mMediaPlayer.getCurrentPosition();
    }

    @Override
    public int getDuration() {
        return mMediaPlayer.getDuration();
    }

    @Override
    public boolean isPlaying() {
        return mMediaPlayer.isPlaying();
    }

    @Override
    public void pause() {
      if(mMediaPlayer.isPlaying())
       mMediaPlayer.pause();
    }

    @Override
    public void seekTo(int pos) {
        mMediaPlayer.seekTo(pos);
    }

    @Override
    public void start() {
        mMediaPlayer.start();
        mMediaController.show();
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        mMediaController.show();
        return false;
    }
}

面临的问题是我可以播放音频文件,但没有显示任何弹出布局。

【问题讨论】:

    标签: android android-mediaplayer android-mediarecorder


    【解决方案1】:

    媒体播放器

       MediaPlayer mp = new MediaPlayer();
    
     // Set data source -
      setDataSource("/sdcard/path_to_song");
    
     // Play audio
     mp.start();
    
    // Pause audio
    mp.pause();
    
       // Reset mediaplayer
      mp.reset();
    
      // Get song length duration - in milliseconds
     mp.getDuration();
    
      // Get current duration - in milliseconds
     mp.getCurrentDuration();
    
       // Move song to particular second - used for Forward or Backward
      mp.seekTo(positon); // position in milliseconds
    
      // Check if song is playing or not
     mp.isPlaying(); // returns true or false
    

    希望这会给你一些解决方案。请参阅此link。它会解决你的问题

    【讨论】:

    • 您的回答是关于简单的媒体播放器。这与我发布的问题无关。
    • @Nandhiya 欢迎。快乐编码:)
    【解决方案2】:
      @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
    
            mMediaPlayer = new MediaPlayer();
            mMediaController = new MediaController(this);
            mMediaController.setMediaPlayer(PlayAudioActivity.this);
            mMediaController.setAnchorView(findViewById(R.id.audioView));
    
            String audioFile = "" ; 
            try {
                mMediaPlayer.setDataSource(audioFile);
                mMediaPlayer.prepare();
            } catch (IOException e) {
               System.out.println("Error in playing audio");
            }
    
            mMediaPlayer.setOnPreparedListener(new OnPreparedListener() {
                @Override
                public void onPrepared(MediaPlayer mp) {
                        mHandler.post(new Runnable() {
                                public void run() {
                                        mMediaController.show(10000);
                                        mMediaPlayer.start();
                                }
                        });
                }
            });
        }
    

    如果你已经这样做了。

    @Override
        protected void onDestroy() {
            super.onDestroy();
            mMediaPlayer.stop();
            mMediaPlayer.release();
        }
    
    
    
    
     @Override
        public boolean canPause() {
            return true;
        }
    
        @Override
        public boolean canSeekBackward() {
            return false;
        }
    
        @Override
        public boolean canSeekForward() {
            return false;
        }
    
        @Override    
        public int getBufferPercentage() {
            int percentage = (mMediaPlayer.getCurrentPosition() * 100) / mMediaPlayer.getDuration();
    
            return percentage;
        }
    
        @Override
        public int getCurrentPosition() {
            return mMediaPlayer.getCurrentPosition();
        }
    
        @Override
        public int getDuration() {
            return mMediaPlayer.getDuration();
        }
    
        @Override
        public boolean isPlaying() {
            return mMediaPlayer.isPlaying();
        }
    
        @Override
        public void pause() {
            if(mMediaPlayer.isPlaying())
                mMediaPlayer.pause();
        }
    
        @Override
        public void seekTo(int pos) {
            mMediaPlayer.seekTo(pos);
        }
    
        @Override
        public void start() {
            mMediaPlayer.start();
        }
    
        @Override
        public boolean onTouchEvent(MotionEvent event) {
            mMediaController.show();
    
            return false;
        }
    }
    

    【讨论】:

    • 等我更新,一旦它是 gud 我会认为你的解决方案被接受了 ok
    • 我有一些疑问,请您澄清一下 1.活动是否实现了任何侦听器 2.您添加的视图是该布局或任何小部件,否则请发布整个代码以便我能理解以更好的方式。在此先感谢
    • 就像在屏幕截图中一样,我添加了相对布局,因为我添加了按钮作为 child.that 没有显示
    • 好的。探针是您编写的代码与我发送给您的代码相同,但是您必须在弹出窗口启动时输入此代码..那时将起作用
    【解决方案3】:
    public class PlayAudioActivity extends Activity implements MediaPlayerControl {
            private MediaController mMediaController;
            private MediaPlayer mMediaPlayer;
            private Handler mHandler = new Handler();
    

    使用这个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-02
      • 2011-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多