2013-07-01 96 views
1

我卡住了一個要求,我需要發揮android.I媒體文件將發佈播放音頻文件的Android

Playing the media file

實際要求用戶要玩網頁的截屏錄音列表中的音頻文件。錄音列表通過列表適配器顯示。我想在同一頁面上顯示音頻文件的播放進度(如屏幕截圖中所示)。

Iam粘貼我試過的代碼。

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

問題是我能夠播放音頻文件,但它不顯示任何彈出式佈局。

回答

3

媒體播放器

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。它會解決你的問題

+0

downvoters應該評論爲什麼!否則不要downvote不明原因... – Nirmal

+0

你的答案是關於簡單的媒體播放器。這與我已發佈的問題無關。 – Nandhiya

+1

現在請參閱我的編輯答案和鏈接。這可能會對你有所幫助。 – Nirmal

3
@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; 
    } 
} 
+0

謝謝你,我會檢查它很快傳達更新 – Nandhiya

+1

是你還是這個好解決不 –

+0

等待我更新一次,它是GUD我會考慮你的SOLN所接受OK – Nandhiya

1
public class PlayAudioActivity extends Activity implements MediaPlayerControl { 
     private MediaController mMediaController; 
     private MediaPlayer mMediaPlayer; 
     private Handler mHandler = new Handler(); 

使用它。