編輯:關於Android編程
Android三種路徑的音樂播放:儲存在不同路徑中音樂有不同的獲取方式,過程大同小異,結果當然是一樣。但是它們最重要的不同點是什麼呢。
一.應用內的音頻文件
public void isPlayOrPause(View view){
final ImageButton imageButton= (ImageButton) view
if(mediaPlayer==null){
//實例化MediaPlayer
//播放應用內
//mediaPlayer = MediaPlayer.create(this, R.raw.love);
mediaPlayer.start();
//把圖標修改為暫停的圖標
imageButton.setImageResource(android.R.drawable.ic_media_pause);
//獲取音樂的總時長
int duration=mediaPlayer.getDuration();
//設置進度條的最大值為音樂的總時長
seekBar.setMax(duration);
new MyThread().start();
}
});
}else if(mediaPlayer.isPlaying()){
mediaPlayer.pause();
//把圖標修改為播放的圖標
imageButton.setImageResource(android.R.drawable.ic_media_play);
}else{
mediaPlayer.start();
//把圖標修改為暫停的圖標
imageButton.setImageResource(android.R.drawable.ic_media_pause);
}
}
二.手機內的音頻文件
手機內得在清單文件中配置可閱讀文件權限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE">uses-permission>
public void isPlayOrPause(View view){
final ImageButton imageButton= (ImageButton) view;
if(mediaPlayer==null){
//播放內存卡中音頻文件
mediaPlayer=new MediaPlayer();
//設置類型
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
//設置音源
try {
mediaPlayer.setDataSource(this, Uri.parse("file://mnt/sdcard/Music/f.mp3"));
//准備一下(內存卡)
mediaPlayer.prepare();
} catch (IOException e) {
e.printStackTrace();
}
mediaPlayer.start();
//把圖標修改為暫停的圖標
imageButton.setImageResource(android.R.drawable.ic_media_pause);
//獲取音樂的總時長
int duration=mediaPlayer.getDuration();
//設置進度條的最大值為音樂的總時長
seekBar.setMax(duration);
new MyThread().start();
}else if(mediaPlayer.isPlaying()){
mediaPlayer.pause();
//把圖標修改為播放的圖標
imageButton.setImageResource(android.R.drawable.ic_media_play);
}else{
mediaPlayer.start();
//把圖標修改為暫停的圖標
imageButton.setImageResource(android.R.drawable.ic_media_pause);
}
}
三.網絡上的音頻文件
網絡權限
<uses-permission android:name="android.permission.INTERNET" />
public void isPlayOrPause(View view){
final ImageButton imageButton= (ImageButton) view;
if(mediaPlayer==null){
//實例化MediaPlayer
//設置類型
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
//設置音源
try {
//播放網絡音樂
mediaPlayer.setDataSource(this, Uri.parse("http://192.168.43.135/internet.mp3"));
//准備(網絡)
mediaPlayer.prepareAsync();
} catch (IOException e) {
e.printStackTrace();
}
//監聽:准備完成的監聽
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
mediaPlayer.start();
//把圖標修改為暫停的圖標
imageButton.setImageResource(android.R.drawable.ic_media_pause);
//獲取音樂的總時長
int duration=mediaPlayer.getDuration();
//設置進度條的最大值為音樂的總時長
seekBar.setMax(duration);
new MyThread().start();
}
});
}else if(mediaPlayer.isPlaying()){
mediaPlayer.pause();
//把圖標修改為播放的圖標
imageButton.setImageResource(android.R.drawable.ic_media_play);
}else{
mediaPlayer.start();
//把圖標修改為暫停的圖標
imageButton.setImageResource(android.R.drawable.ic_media_pause);
}
}
音樂播放器由一SeekBar作為展示,他的進度隨著音樂的播放而前進,當我們對它拖拽時音樂也會相對應
的前進,這時就需要一個線程對它進行操作,同時需要監聽到他當前位置
class MyThread extends Thread{
@Override
public void run() {
super.run();
while(seekBar.getProgress()<=seekBar.getMax()){
//獲取當前音樂播放的位置
int currentPosition=mediaPlayer.getCurrentPosition();
//讓進度條動起來
seekBar.setProgress(currentPosition);
}
}
}
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
//獲取拖動結束之後的位置
int progress=seekBar.getProgress();
//跳轉到某個位置播放
mediaPlayer.seekTo(progress);
}
});
android仿新聞閱讀器菜單彈出效果實例(附源碼DEMO下載)
開發中碰到問題之後實現的,覺得可能有的開發者用的到或則希望獨立成一個小功能DEMO,所以就放出來這麼一個DEMO。原本覺得是最後完成後發網站客戶端的,可是這樣體現不出一個
Android Studio多個module導入AAR庫
介紹有時候由於需要一些自定義之後的開源庫,無法使用jCenter裡面的官方庫,又懶得自己搭建Maven倉庫,所以我們想要自己在項目裡面直接導入本地的AAR庫。通用方法和問
我的Android進階之旅------Android 5.0中出現警告的解決方法: Service Intent must be explicit:
1.錯誤描述今天在Android4.4 的小米4手機上運行我的程序的時候沒有報錯,而在Android 5.1的華為P7上運行我的程序的時候報了以下的錯誤,錯誤提示如下:E
Android Service
1. Service和IntentService區別Servicehttp://android.xsoftlab.net/reference/android/app/Se