Android實(shí)現(xiàn)多媒體之播放音樂
閑來無聊,最近了解了一下多媒體的一些初步知識。
音頻播放主要設(shè)計(jì)到MediaPlayer這個(gè)類,播放音頻的路徑可以來源于三個(gè)地方。
1.應(yīng)用內(nèi)的音頻
public class MediaPlayActivity extends AppCompatActivity {
private SeekBar seekBar;
private MediaPlayer mediaPlayer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_media_play);
seekBar = (SeekBar) findViewById(R.id.seekBar);
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
//獲取拖動(dòng)結(jié)束后的位置
int progress=seekBar.getProgress();
//跳轉(zhuǎn)到某個(gè)位置播放
mediaPlayer.seekTo(progress);
}
});
}
public void isPlayOrPause(View view){
ImageButton imageButton= (ImageButton) view;
if(mediaPlayer==null){//代表第一次播放音樂
mediaPlayer = MediaPlayer.create(this, R.raw.Loser);
mediaPlayer.start();
//把圖標(biāo)改成暫停的圖標(biāo)(這里的暫停圖標(biāo)就是播放時(shí)的狀態(tài))
imageButton.setImageResource(android.R.drawable.ic_media_pause);
//獲取音樂的總時(shí)長
int duration=mediaPlayer.getDuration();
//設(shè)置進(jìn)度條的最大值為音樂的總時(shí)長
seekBar.setMax(duration);
new MyThread();
}else if(mediaPlayer.isPlaying()){//正在播放音樂
mediaPlayer.pause();
//把圖標(biāo)改成播放的圖標(biāo)(暫停狀態(tài))
imageButton.setImageResource(android.R.drawable.ic_media_play);
}else{
mediaPlayer.start();
imageButton.setImageResource(android.R.drawable.ic_media_pause);
}
}
class MyThread extends Thread{
@Override
public void run() {
super.run();
while(seekBar.getProgress()<seekBar.getMax()){
//獲取當(dāng)前音樂播放的位置
int currentPosition=mediaPlayer.getCurrentPosition();
//讓進(jìn)度條跟著時(shí)間走
seekBar.setProgress(currentPosition);
}
}
}
}
2. 播放內(nèi)存卡里的音樂,這一部分代碼就是替換前面的mediaPlayer = MediaPlayer.create(this, R.raw.Loser);
//播放內(nèi)存卡內(nèi)的音頻
mediaPlayer=new MediaPlayer();
//設(shè)置類型
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
//設(shè)置音源
try {
mediaPlayer.setDataSource(this, Uri.parse("file://mnt/sdcard/Music/f.mp3"));
//必須在播放前加載音頻文件
mediaPlayer.prepare();
} catch (IOException e) {
e.printStackTrace();
}
3.播放網(wǎng)絡(luò)上的音頻文件
首先我們要把網(wǎng)絡(luò)環(huán)境搭配,
1).找到我們tomcat放的位置,
2)然后雙擊startup.bat運(yùn)行,最小化界面
3)然后打開cmd命令,輸入config找到我們本機(jī)的IPv4地址
4)然后在瀏覽器上試一下,是否能夠打開tomcat的主頁
5)在把自己的mp3文件放到tomcat的ROOT目錄下
6)然后在自己的模擬器上,用瀏覽器同樣的去打開,用自己本機(jī)的IPv4地址去打開tomcat的主頁,在后面加上音樂的名字,看能不能放出來,如果可以,就代表環(huán)境已經(jīng)搭配好了
7)接下來我們上代碼
把之前播放內(nèi)存卡上的音頻路徑改成網(wǎng)絡(luò)上的
//播放網(wǎng)絡(luò)上的
mediaPlayer.setDataSource(this, Uri.parse("http://192.168.43.164/internet.mp3"));
//必須在播放前加載音頻文件(異步準(zhǔn)備)
mediaPlayer.prepareAsync();
然后準(zhǔn)備完成的監(jiān)聽
//監(jiān)聽:準(zhǔn)備完成的監(jiān)聽
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mediaPlayer.start();
//把圖標(biāo)改成暫停的圖標(biāo)(這里的暫停圖標(biāo)就是播放時(shí)的狀態(tài))
imageButton.setImageResource(android.R.drawable.ic_media_pause);
//獲取音樂的總時(shí)長
int duration=mediaPlayer.getDuration();
//設(shè)置進(jìn)度條的最大值為音樂的總時(shí)長
seekBar.setMax(duration);
new MyThread();
}
});
最后,注意一個(gè)細(xì)節(jié),在Manifasit里面加上聯(lián)網(wǎng)的權(quán)限
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
最后運(yùn)行一下,就大功告成了,界面非常的簡單

如果你們想加上歌詞啊,時(shí)間啊,可以繼續(xù)完善,但是思路都差不多,今天的分享就到此了
- Android實(shí)現(xiàn)使用流媒體播放遠(yuǎn)程mp3文件的方法
- android多媒體音樂(MediaPlayer)播放器制作代碼
- Android多媒體之VideoView視頻播放器
- Android多媒體教程之播放視頻的四種方法
- Android 多媒體播放API簡單實(shí)例
- Android開發(fā)之MediaPlayer多媒體(音頻,視頻)播放工具類
- Android開發(fā)之多媒體文件獲取工具類實(shí)例【音頻,視頻,圖片等】
- Android開發(fā)實(shí)現(xiàn)的IntentUtil跳轉(zhuǎn)多功能工具類【包含視頻、音頻、圖片、攝像頭等操作功能】
- Android開發(fā)之媒體播放工具類完整示例
相關(guān)文章
Android 監(jiān)聽?wèi)?yīng)用前/后臺(tái)切換實(shí)例代碼
本篇文章主要介紹了Android 監(jiān)聽?wèi)?yīng)用前/后臺(tái)切換實(shí)例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-06-06
移動(dòng)端開發(fā)之Jetpack?Hilt技術(shù)實(shí)現(xiàn)解耦
Hilt的出現(xiàn)解決前兩點(diǎn)問題,因?yàn)镠ilt是Dagger針對Android平臺(tái)的場景化框架,比如Dagger需要我們手動(dòng)聲明注入的地方,而Android聲明的地方不都在onCreate()嗎,所以Hilt就幫我們做了,除此之外還做了很多事情2023-02-02
Android實(shí)現(xiàn)標(biāo)題顯示隱藏功能
這篇文章主要介紹了Android實(shí)現(xiàn)標(biāo)題顯示隱藏功能2016-02-02
Android View移動(dòng)的六種方法小結(jié)
在android開發(fā)中,經(jīng)常會(huì)遇到一個(gè)view需要它能夠支持滑動(dòng)的需求。下面通過本篇文章給大家介紹android view移動(dòng)的六種方法,對android view移動(dòng)相關(guān)知識感興趣的朋友一起學(xué)習(xí)吧2015-12-12
Android 自定義SeekBar動(dòng)態(tài)改變硬件音量大小實(shí)現(xiàn)和音量鍵的同步(推薦)
這篇文章主要介紹了 Android 自定義SeekBar動(dòng)態(tài)改變硬件音量大小實(shí)現(xiàn)和音量鍵的同步效果,整段代碼簡單易懂,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-01-01
Android中區(qū)別Drawable Bitmap Canvas Paint
本文主要介紹Android中Drawable Bitmap Canvas Paint 之間的區(qū)別,這里對這幾個(gè)概念做出詳細(xì)介紹,開發(fā)Android游戲的朋友可以參考下2016-07-07
Android后臺(tái)線程和UI線程通訊實(shí)例
這篇文章主要介紹了Android后臺(tái)線程和UI線程通訊實(shí)例,每一步的要點(diǎn)和步驟都有提及,并配有代碼例子,需要的朋友可以參考下2014-06-06

