简体   繁体   中英

Playing audio file in android

I got stuck with one requirement i need to play a media file in android.I will post the screen shot of the page

播放媒体文件

Actual requirement is the user wants to play the audio file in his recordings list.The recordings list are shown through list adapter.I want to display the play progress of the audio file on the same page(as like shown in the screen shot).

Iam pasting the code which i have tried.

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;
    }
}

The problem am facing is i am able to play the audio file ,but it is not showing any popup layout.

Media player

   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

Hope this will give you some solution. Refer this link . It will solve your problem

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

if you have done this then.

@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;
    }
}
public class PlayAudioActivity extends Activity implements MediaPlayerControl {
        private MediaController mMediaController;
        private MediaPlayer mMediaPlayer;
        private Handler mHandler = new Handler();

use this .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM