如何在播放音頻文件時顯示MediaController
?我正在創建一個MediaController
的實例並調用它的show()
方法,但未顯示。 有沒有可以幫助我解決這個問題?如何在Android中播放音頻時顯示MediaController?
回答
以下是使用MediaPlayer和MediaController播放音頻的活動示例。
import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.media.MediaPlayer.OnPreparedListener;
import android.view.MotionEvent;
import android.widget.MediaController;
import android.widget.TextView;
import java.io.IOException;
public class AudioPlayer extends Activity implements OnPreparedListener, MediaController.MediaPlayerControl{
private static final String TAG = "AudioPlayer";
public static final String AUDIO_FILE_NAME = "audioFileName";
private MediaPlayer mediaPlayer;
private MediaController mediaController;
private String audioFile;
private Handler handler = new Handler();
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.audio_player);
audioFile = this.getIntent().getStringExtra(AUDIO_FILE_NAME);
((TextView)findViewById(R.id.now_playing_text)).setText(audioFile);
mediaPlayer = new MediaPlayer();
mediaPlayer.setOnPreparedListener(this);
mediaController = new MediaController(this);
try {
mediaPlayer.setDataSource(audioFile);
mediaPlayer.prepare();
mediaPlayer.start();
} catch (IOException e) {
Log.e(TAG, "Could not open file " + audioFile + " for playback.", e);
}
}
@Override
protected void onStop() {
super.onStop();
mediaController.hide();
mediaPlayer.stop();
mediaPlayer.release();
}
@Override
public boolean onTouchEvent(MotionEvent event) {
//the MediaController will hide after 3 seconds - tap the screen to make it appear again
mediaController.show();
return false;
}
//--MediaPlayerControl methods----------------------------------------------------
public void start() {
mediaPlayer.start();
}
public void pause() {
mediaPlayer.pause();
}
public int getDuration() {
return mediaPlayer.getDuration();
}
public int getCurrentPosition() {
return mediaPlayer.getCurrentPosition();
}
public void seekTo(int i) {
mediaPlayer.seekTo(i);
}
public boolean isPlaying() {
return mediaPlayer.isPlaying();
}
public int getBufferPercentage() {
return 0;
}
public boolean canPause() {
return true;
}
public boolean canSeekBackward() {
return true;
}
public boolean canSeekForward() {
return true;
}
//--------------------------------------------------------------------------------
public void onPrepared(MediaPlayer mediaPlayer) {
Log.d(TAG, "onPrepared");
mediaController.setMediaPlayer(this);
mediaController.setAnchorView(findViewById(R.id.main_audio_view));
handler.post(new Runnable() {
public void run() {
mediaController.setEnabled(true);
mediaController.show();
}
});
}
}
這裏是可以與上面的代碼中使用的佈局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/main_audio_view"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="Now playing:"
android:textSize="25sp"
android:textStyle="bold"
/>
<TextView
android:id="@+id/now_playing_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dip"
android:layout_marginLeft="10dip"
android:layout_marginRight="10dip"
android:layout_gravity="center"
android:text="Now playing.."
android:textSize="16sp"
android:textStyle="italic"
/>
</LinearLayout>
有沒有人試過上面的代碼?,它不工作,我沒有聽到音頻聲音或顯示,是我定義了'AUDIO_FILE_NAME'這樣的事情「mysite.com/talk/1.mp3」 – 2012-01-17 03:27:21
謝謝這幫助我很多! – krisDrOid 2012-02-29 14:00:02
我(最後)修正了@ jp36建議的onStop方法。感謝@ jp36的更正! – user229487 2013-06-15 21:12:59
我還沒有足夠的代表評論,所以我不得不只是張貼這是一個答案。
@ user229487的回答
你需要添加mediaController.hide();
到onStop()
方法。如果你不這樣做,你碰巧旋轉窗口或關閉窗口,它顯示的同時,你會得到一個錯誤Activity x has leaked window
新的方法應該是這樣的
@Override
protected void onStop() {
super.onStop();
mediaController.hide();
mediaPlayer.stop();
mediaPlayer.release();
}
我複製上面的代碼從user229487逐字,但無法得到它的工作。鑑於我是Android開發新手,我發現了你需要付出意圖以及其他一些事情的難題。我也不完全理解這個意圖是如何與用戶界面一起工作的(我是新來的),但是會對它起作用。
其他菜鳥一樣我很少有東西讓上面的代碼工作(我至少得到它現在不崩潰,播放一首歌曲:)):
沒有這不會編譯:
@Override
public int getAudioSessionId() {
return 0;
}要設置手動音頻:(變更線:)
public static final String AUDIO_FILE_NAME = Environment.getExternalStorageDirectory()+"/MusicFolder/Song.mp3";
設置意圖
加入這一行:this.getIntent().putExtra(AUDIO_FILE_NAME,AUDIO_FILE_NAME);
這一行之前:audioFile = this.getIntent().getStringExtra(AUDIO_FILE_NAME);
應該編譯現在播放歌曲。
我還沒有被允許發表評論...因此,我寫在這裏。 上面的代碼非常好。我只需要取出
mediaPlayer.prepare();
位在嘗試捕捉,否則活動將崩潰。不知道這一點應該做什麼,沒有它,它工作得很好。謝謝!!
- 1. 如何使用MediaPlayer和MediaController爲Android實現音頻播放器?
- 2. 用播放器播放音頻時的Android顯示動畫
- 3. 如何在顯示文本時在Python 2.6.6中播放音頻?
- 4. 如何在播放音樂時顯示頻譜?
- 5. Android音頻播放
- 6. Android中的放音音頻播放
- 7. 如何顯示音頻文件列表並在選擇特定文件時播放並且還想在播放過程中顯示音頻播放器?
- 8. 如何在Post摘錄中顯示音頻播放器?
- 9. 如何使用MediaPlayerLauncher播放時顯示音頻細節?
- 10. 在Android音樂播放器中播放音頻文件
- 11. 在MediaElement中播放音頻時顯示一些內容
- 12. Android的videoview控件不顯示視頻,只播放音頻
- 13. Android MediaPlayer不顯示視頻,只播放音頻
- 14. Android:片段內的VideoView只播放音頻,不顯示視頻
- 15. 如何在iPod仍在播放音頻時將視頻靜音?
- 16. 如何在Android上的MediaPlayer中播放實時HTTP音頻流?
- 17. 音頻播放器IE9不顯示
- 18. 顯示mediaelement.js音頻播放器聯機
- 19. 顯示和播放音頻文件
- 20. 在Android中播放音頻文件
- 21. 在android中播放音頻片段
- 22. MediaPlayer無法在Android中播放音頻
- 23. 在Android onTouch中播放音頻
- 24. 通過AudioManager在Android中播放音頻?
- 25. 在android中播放音頻文件
- 26. 在Android中播放音頻太慢
- 27. android音頻播放器
- 28. Android播放音頻文件
- 29. Android - 順序音頻播放?
- 30. Android播放音頻一次
每個答案的評分旁邊都有刻度線圖標(在左邊,你會看到它),只需點擊它 – Lope 2011-08-10 19:28:03
請接受下面的答案之一。它有助於對花時間回答您的問題的人們表示一些讚賞。 – Pieter 2012-06-03 13:02:08