1

Androidでメディアファイルを再生する必要がある1つの要件に行き詰まりました。ページのスクリーンショットを投稿します

メディア ファイルの再生

実際の要件は、ユーザーが自分の録音リストでオーディオ ファイルを再生することです。録音リストは、リスト アダプターを介して表示されます。オーディオ ファイルの再生の進行状況を同じページに表示したい (スクリーン ショットに示すように)。

私が試したコードを貼り付けています。

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

直面している問題は、オーディオ ファイルを再生できることですが、ポップアップ レイアウトが表示されません。

4

3 に答える 3

5

メディアプレーヤー

   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

これで解決策が得られることを願っています。このリンクを参照してください。それはあなたの問題を解決します

于 2013-07-01T05:55:36.467 に答える