android音樂播放源碼
㈠ android 如何實現音樂播放
在Android平台下,要實現聲音的播放是十分容易實現的,只要生成一個MediaPlayer對象,並調用它的相關方法,就能改變對聲音播放進行控制。MediaPlayer對象有一下各種狀態:
熟悉了MediaPlayer對象的各種狀態後以及轉換條件,就能很好的控制媒體播放。
例如:播放res/raw文件夾中的歌曲十分簡單,只需寫如下代碼:
MediaPlayer mp = MediaPlayer.create(context, R.raw.sound_file_1);
mp.start();
也可以指定音樂文件的位置來進行播放,例如,在sdcard根目錄下有有一首歌曲:test.mp3。則可以這樣播放:
MediaPlayer mp = new MediaPlayer();
String song = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "test.mp3";
try {
mp.setDataSource(song);
mp.prepare();
mp.start();
} catch (Exception e) {
e.printStackTrace();
}
建議在播放音樂的時候把MediaPlayer放在Service中,因為如果放在Activity中會使得界面特別卡。而且音樂不能放到後台里播放,一旦退出Activity,音樂就會暫停播放。
可以在Activity中布局相關的界面,例如按鈕等。然後通過這個Activitiy來啟動這個Service。要通過UI與Service交互,可以通過Intent對象傳遞消息。更復雜一些,要實現Service向Activity發送消息,並利用這些消息來更新UI,這可以用廣播機制,例如告訴Activity是否正在播放,播放進度,當前播放歌曲條目等信息。
例如以下實例代碼:
/*Activity中*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btnPlay = (Button)findViewById(R.id.btnPlay);
btnPause = (Button)findViewById(R.id.btnPause);
btnPlay.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this,SoundService.class);
intent.putExtra("playing", true);
startService(intent);
}
});
btnPause.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this,SoundService.class);
intent.putExtra("playing", false);
startService(intent);
}
});
}
}
播放音樂的Service代碼:
package com.yzy.sound;
import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;
public class SoundService extends Service {
private MediaPlayer mp;
@Override
public void onCreate() {
super.onCreate();
mp = MediaPlayer.create(this, R.raw.test);
}
@Override
public void onDestroy() {
super.onDestroy();
mp.release();
stopSelf();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
boolean playing = intent.getBooleanExtra("playing", false);
if (playing) {
mp.start();
} else {
mp.pause();
}
return super.onStartCommand(intent, flags, startId);
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
㈡ android添加背景音樂代碼,越詳細越好。
可以通過Service來播放背景音樂,以下是實現代碼:
1.在AndroidManifest.xml文件中的<application>標簽內加入下邊語句
<service android:name=".MusicServer">
<intent-filter>
<action android:name="com.angel.Android.MUSIC"/>
<category android:name="android.intent.category.default" />
</intent-filter>
</service>
2.新建MusicServer.java類,內容為
import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;
public class MusicServer extends Service {
private MediaPlayer mediaPlayer;
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onStart(Intent intent,int startId){
super.onStart(intent, startId);
if(mediaPlayer==null){
// R.raw.mmp是資源文件,MP3格式的
mediaPlayer = MediaPlayer.create(this, R.raw.abc);
mediaPlayer.setLooping(true);
mediaPlayer.start();
}
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
mediaPlayer.stop();
}
}
3.將歌曲放入raw文件夾下,名稱為abc。
4.在Activity中加入代碼
private Intent intent = new Intent("com.angel.Android.MUSIC");
onCreate方法中加入startService(intent);
就可以播放了。
㈢ Android開發音樂播放器,如何實現單曲循環,順序播放,隨機播放,全部循環功能,高分求助
MediaPlayer 對象調用setLooping(true);是循環播放。
順序播放,隨機播放,全部循環功能 這些就是自己寫方法實現就好了,
順序播放就是當一首歌播放完後,在播放列表中找到它下一首歌的ID,直到全部完成。
隨機播放就是當一首歌播放完後,在播放列表中隨機抽取一首歌的ID(排除已經播放),直到全部完成。
全部循環就是順序播放全部歌曲,到最後一首之後從第一首播放。
㈣ 最近在看android音樂播放器的源碼,發現播放音樂等操作都是用service來進行的,這樣做有什麼好處求解
首先service的啟動方式有兩種,Context.startService()方式啟動和Context.bindService()方式啟動.前者如果你的程序退出時不停止Service,它會在後台一直運行.後者是跟你的程序綁定了,你的程序退出時Service也停止了.詳細的你去查一下.用Service的好處就是當你的程序進入後台時,不影響音樂的播放.如果沒有把播放音樂寫在Service中當你的播放器進入後台或者退出時音樂就停止了.
㈤ android開發,怎麼遍歷SD卡所有MP3文件並列舉出來,能不能給我最簡單的代碼呀
Cursor cursor = context.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, MediaStore.Audio.Media.DEFAULT_SORT_ORDER);
//遍歷媒體資料庫
if(cursor.moveToFirst()){
while (!cursor.isAfterLast()) {
//歌曲編號
int id = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media._ID));
//歌曲id
int trackId=cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM_ID));
//歌曲標題
String title = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE));
//歌曲的專輯名:MediaStore.Audio.Media.ALBUM
String album = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM));
//歌曲的歌手名: MediaStore.Audio.Media.ARTIST
String artist = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST));
//歌曲文件的路徑 :MediaStore.Audio.Media.DATA
String url = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA));
//歌曲的總播放時長:MediaStore.Audio.Media.DURATION
int ration = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DURATION));
//歌曲文件的大小 :MediaStore.Audio.Media.SIZE
Long size = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.SIZE));
//歌曲文件顯示名字
String disName=cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME));
cursor.moveToNext();
}
cursor.close();
}
㈥ 請問android2.3自帶的音樂播放器有很多亂碼,具體怎麼修改源碼請指教!
我的答案絕對OK,1. 設置-》應用程序-》管理應用程序-》所有應用程序-》搜索到「媒體存儲」-》執行「清除數據」
2. 重啟系統,打開音樂播放器,等待媒體存儲資料庫重新載入