做一个简单的Mp3播放器的主要内容包括:
1.获取手机中的mp3文件
在手机中有一个内容提供者供我们使用
主要就是下面的语句来获取
<pre name="code" class="java">Cursor cursor = getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, MediaStore.Audio.Media.DEFAULT_SORT_ORDER);
// //歌曲ID:MediaStore.Audio.Media._ID // int id = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media._ID)); // //歌曲的名称 :MediaStore.Audio.Media.TITLE // String tilte = 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 duration = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DURATION)); // //歌曲文件的大小 :MediaStore.Audio.Media.SIZE // int size =(int)cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.SIZE));
2.播放获取出来的mp3文件
MediaPlayer mediaPlayer = new MediaPlayer();//实例化一个媒体播放器
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);//设置媒体播放器的音乐类型
mediaPlayer.setDataSource(path);//设置播放文件的路径
mediaPlayer.setLooping(true);
mediaPlayer.prepareAsync();//播放准备
mediaPlayer.start();//开始播放
主文件代码如下:
由于博主只是学习下这两部分的内容,所以其中有些地方是有问题的,看主要内容就好。
package com.mp3palyer; import java.io.File; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.content.Intent; import android.database.Cursor; import android.media.AudioManager; import android.media.MediaPlayer; import android.media.MediaPlayer.OnCompletionListener; import android.media.MediaPlayer.OnErrorListener; import android.media.MediaPlayer.OnPreparedListener; import android.os.Bundle; import android.provider.MediaStore; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends Activity implements OnClickListener { private MediaPlayer mediaPlayer; private LinearLayout toControlView; private LinearLayout playBtn; private LinearLayout favoriteBtn; private LinearLayout nextBtn; private ImageView playBtnImage; private String currentPath; private ListView mp3ListView; private List<Mp3Info> mp3InfoList = new ArrayList<Mp3Info>(); private int currentPosition = 0; private int playMode = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findMp3(); if(mp3InfoList != null) currentPath = mp3InfoList.get(0).getUrl(); findViewId(); } private void findMp3() { Cursor cursor = getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, MediaStore.Audio.Media.DEFAULT_SORT_ORDER); System.out.println("一共有 "+cursor.getCount()); while(cursor.moveToNext()){ String url = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA)); if(url.endsWith(".mp3")){ Mp3Info mp3Info = new Mp3Info(); int id = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media._ID)); int duration = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DURATION)); int size =(int)cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.SIZE)); String tilte = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE)); String album = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM)); String artist = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST)); mp3Info.setId(id); mp3Info.setDuration(duration); mp3Info.setSize(size); mp3Info.setTilte(tilte); mp3Info.setArtist(artist); mp3Info.setAlbum(album); mp3Info.setUrl(url); mp3InfoList.add(mp3Info); } } cursor.close(); } private void findViewId(){ toControlView = (LinearLayout)findViewById(R.id.toControlView); playBtn = (LinearLayout)findViewById(R.id.playBtn); favoriteBtn = (LinearLayout)findViewById(R.id.favoriteBtn); nextBtn = (LinearLayout)findViewById(R.id.nextBtn); playBtnImage = (ImageView)findViewById(R.id.playBtnImage); mp3ListView = (ListView)findViewById(R.id.myListView); Mp3Adapter mp3ListAdapter = new Mp3Adapter(mp3InfoList); mp3ListView.setAdapter(mp3ListAdapter); toControlView.setOnClickListener(this); playBtn.setOnClickListener(this); favoriteBtn.setOnClickListener(this); nextBtn.setOnClickListener(this); mp3ListView.setOnItemClickListener(new ListView.OnItemClickListener(){ @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { String path = mp3InfoList.get(position).getUrl();//获取路径 play(path);//播放音乐 } }); } @Override public void onClick(View v) { switch(v.getId()){ case R.id.toControlView: startActivity(new Intent(this,PlayActivity.class)); break; case R.id.favoriteBtn: break; case R.id.playBtn: if(playMode == 0){ playMode = 1; playBtnImage.setImageResource(R.drawable.ao9); continuePlay(currentPath); }else{ playMode = 0; playBtnImage.setImageResource(R.drawable.aoa); pause(); } break; case R.id.nextBtn: playNext(mp3InfoList.get(currentPosition+1).getUrl()); break; default: } } //播放一个新的 private void playNew(String path){ try { File file = new File(path); if(file.exists()&&file.length()>0){ mediaPlayer = new MediaPlayer(); mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); mediaPlayer.setDataSource(path); mediaPlayer.setLooping(true); mediaPlayer.prepareAsync(); mediaPlayer.setOnPreparedListener(new OnPreparedListener(){ @Override public void onPrepared(MediaPlayer mp) { mediaPlayer.start(); } }); mediaPlayer.setOnCompletionListener(new OnCompletionListener(){ @Override public void onCompletion(MediaPlayer mp) { //mediaPlayer. } }); mediaPlayer.setOnErrorListener(new OnErrorListener(){ @Override public boolean onError(MediaPlayer mp, int what, int extra) { return false; } }); }else{ Toast.makeText(this, "文件不存在!", 0).show(); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } //播放默认的 private void play(String path){ //先停止当前的播放 if(mediaPlayer != null){ stop(); } //播放新的 playNew(path); } //播放下一首 private void playNext(String path){ play(path); } //暂停 private void pause(){ if(mediaPlayer != null && mediaPlayer.isPlaying()){ mediaPlayer.pause(); } } //停止 private void stop(){ if(mediaPlayer != null&& mediaPlayer.isPlaying()){ mediaPlayer.stop(); mediaPlayer.release(); mediaPlayer = null; } } //继续播放 private void continuePlay(String path){ if(mediaPlayer != null){ mediaPlayer.start(); }else{ playNew(path); } } public class Mp3Adapter extends BaseAdapter{ private List<Mp3Info> mp3List; public Mp3Adapter(List<Mp3Info> mp3List){ this.mp3List = mp3List; } @Override public int getCount() { if(mp3List != null) return mp3List.size(); return 0; } @Override public Object getItem(int position) { // TODO Auto-generated method stub return null; } @Override public long getItemId(int position) { // TODO Auto-generated method stub return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { View view = null; if(convertView != null){ view = convertView; }else{ view = View.inflate(MainActivity.this, R.layout.item_list, null); } ImageView musicImage = (ImageView)view.findViewById(R.id.musicImage); TextView musicName= (TextView)view.findViewById(R.id.musicName); TextView musicSinger= (TextView)view.findViewById(R.id.musicSinger); musicName.setText(mp3List.get(position).getTilte()); musicSinger.setText(mp3List.get(position).getArtist()); return view; } } }