Android簡易音樂播放器實現(xiàn)代碼
本文實例為大家分享了Android音樂播放器的具體代碼,供大家參考,具體內(nèi)容如下
1.播放項目內(nèi)的音樂
package com.thm.g150820_android26_playmusic; import Android.media.MediaPlayer; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.ImageButton; import android.widget.SeekBar; public class MainActivity extends AppCompatActivity { private MediaPlayer mediaPlayer; private SeekBar seekBar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); 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) { //獲取拖動結(jié)束之后的位置 int progress = seekBar.getProgress(); //跳轉(zhuǎn)到某個位置播放 mediaPlayer.seekTo(progress); } }); } public void isPlayOrPause(View view){ //把View強(qiáng)轉(zhuǎn)為ImageButton ImageButton imageButton = (ImageButton) view; if(mediaPlayer==null) { //實例化MediaPlayer mediaPlayer = MediaPlayer.create(this, R.raw.yao); //開始播放 mediaPlayer.start(); //圖標(biāo)修改為暫停的圖標(biāo) imageButton.setImageResource(android.R.drawable.ic_media_pause); //獲取音樂的總時長 int duration = mediaPlayer.getDuration(); //設(shè)置進(jìn)度條的最大值為音樂的總時長 seekBar.setMax(duration); new MyThre().start(); }//判斷如果音樂在播放 else if(mediaPlayer.isPlaying()){ //就暫停音樂 mediaPlayer.pause(); //圖標(biāo)修改為播放的圖標(biāo) imageButton.setImageResource(android.R.drawable.ic_media_play); }else{ mediaPlayer.start(); //圖標(biāo)修改為暫停的圖標(biāo) imageButton.setImageResource(android.R.drawable.ic_media_pause); } } //寫內(nèi)部類 class MyThre extends Thread{ @Override public void run() { super.run(); while(seekBar.getProgress()<=seekBar.getMax()){ //獲取當(dāng)前音樂播放的位置 int currentPosition = mediaPlayer.getCurrentPosition(); //讓進(jìn)度條動起來 seekBar.setProgress(currentPosition); } } } }
2.播放內(nèi)存卡中的音樂
package com.thm.g150820_android26_playmusic; import android.media.AudioManager; import android.media.MediaPlayer; import android.net.Uri; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.ImageButton; import android.widget.SeekBar; import java.io.IOException; public class MainActivity extends AppCompatActivity { private MediaPlayer mediaPlayer; private SeekBar seekBar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); 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) { //獲取拖動結(jié)束之后的位置 int progress = seekBar.getProgress(); //跳轉(zhuǎn)到某個位置播放 mediaPlayer.seekTo(progress); } }); } public void isPlayOrPause(View view){ //把View強(qiáng)轉(zhuǎn)為ImageButton ImageButton imageButton = (ImageButton) view; if(mediaPlayer==null) { //實例化MediaPlayer //播放應(yīng)用內(nèi)的音樂 //mediaPlayer = MediaPlayer.create(this, R.raw.yao); //播放內(nèi)存卡中的音樂 mediaPlayer = new MediaPlayer(); //設(shè)置類型 mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); //設(shè)置音樂路徑 try { mediaPlayer.setDataSource(this, Uri.parse("storage/sdcard0/Music/a.mp3")); //播放之前準(zhǔn)備一下 mediaPlayer.prepare(); } catch (IOException e) { e.printStackTrace(); } //開始播放 mediaPlayer.start(); //圖標(biāo)修改為暫停的圖標(biāo) imageButton.setImageResource(android.R.drawable.ic_media_pause); //獲取音樂的總時長 int duration = mediaPlayer.getDuration(); //設(shè)置進(jìn)度條的最大值為音樂的總時長 seekBar.setMax(duration); new MyThre().start(); }//判斷如果音樂在播放 else if(mediaPlayer.isPlaying()){ //就暫停音樂 mediaPlayer.pause(); //圖標(biāo)修改為播放的圖標(biāo) imageButton.setImageResource(android.R.drawable.ic_media_play); }else{ mediaPlayer.start(); //圖標(biāo)修改為暫停的圖標(biāo) imageButton.setImageResource(android.R.drawable.ic_media_pause); } } //寫線程內(nèi)部類 class MyThre extends Thread{ @Override public void run() { super.run(); while(seekBar.getProgress()<=seekBar.getMax()){ //獲取當(dāng)前音樂播放的位置 int currentPosition = mediaPlayer.getCurrentPosition(); //讓進(jìn)度條動起來 seekBar.setProgress(currentPosition); } } } }
3.添加讀取內(nèi)存的權(quán)限
更多關(guān)于播放器的內(nèi)容請點擊《java播放器功能》進(jìn)行學(xué)習(xí)。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
解析:繼承ViewGroup后的子類如何重寫onMeasure方法
本篇文章是對繼承ViewGroup后的子類如何重寫onMeasure方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06詳談android 6.0 fuse文件系統(tǒng)的掛載和卸載問題
今天小編就為大家分享一篇詳談android 6.0 fuse文件系統(tǒng)的掛載和卸載問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-08-08協(xié)程作用域概念迭代RxTask?實現(xiàn)自主控制
這篇文章主要為大家介紹了協(xié)程作用域概念迭代RxTask實現(xiàn)自主控制詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10Android控件PullRefreshViewGroup實現(xiàn)下拉刷新和上拉加載
這篇文章主要為大家詳細(xì)介紹了Android控件PullRefreshViewGroup實現(xiàn)下拉刷新和上拉加載效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-03-03Android Mms之:對話與聯(lián)系人關(guān)聯(lián)的總結(jié)詳解
本篇文章是對Android中對話與聯(lián)系人的關(guān)聯(lián)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05