Android应用开发--MP3音乐播放器代码实现(一)

long duration = cursor.getLong(cursor

.getColumnIndex(MediaStore.Audio.Media.DURATION));//时长

long size = cursor.getLong(cursor

.getColumnIndex(MediaStore.Audio.Media.SIZE)); //文件大小

String url = cursor.getString(cursor

.getColumnIndex(MediaStore.Audio.Media.DATA)); //文件路径

int isMusic = cursor.getInt(cursor

.getColumnIndex(MediaStore.Audio.Media.IS_MUSIC));//是否为音乐

if (isMusic != 0) { //只把音乐添加到集合当中

mp3Info.setId(id);

mp3Info.setTitle(title);

mp3Info.setArtist(artist);

mp3Info.setDuration(duration);

mp3Info.setSize(size);

mp3Info.setUrl(url);

mp3Infos.add(mp3Info);

}

}

return mp3Infos;

}

/**

  • 填充列表

  • @param mp3Infos

*/

public void setListAdpter(List mp3Infos) {

List<HashMap<String, String>> mp3list = new ArrayList<HashMap<String, String>>();

for (Iterator iterator = mp3Infos.iterator(); iterator.hasNext()😉 {

Mp3Info mp3Info = (Mp3Info) iterator.next();

HashMap<String, String> map = new HashMap<String, String>();

map.put(“title”, mp3Info.getTitle());

map.put(“Artist”, mp3Info.getArtist());

map.put(“duration”, String.valueOf(mp3Info.getDuration()));

map.put(“size”, String.valueOf(mp3Info.getSize()));

map.put(“url”, mp3Info.getUrl());

mp3list.add(map);

}

mAdapter = new SimpleAdapter(this, mp3list,

R.layout.music_list_item_layout, new String[] { “title”, “Artist”, “duration” },

new int[] { R.id.music_title, R.id.music_Artist, R.id.music_duration });

mMusiclist.setAdapter(mAdapter);

}

实现效果如图:

需求2:点击列表的每一项,启动一个服务来播放音乐

1.   注册条目点击监听器OnItemClickListener

2.   定义一个实现OnItemClickListener接口的内部类

3.   定义一个继承Service的服务类PlayerServie

1.   注册条目点击监听器OnItemClickListener

mMusiclist = (ListView) findViewById(R.id.music_list);

mMusiclist.setOnItemClickListener(new MusicListItemClickListener());

mp3Infos = getMp3Infos();

setListAdpter(getMp3Infos());

2.   定义一个实现OnItemClickListener接口的内部类

private class MusicListItemClickListener implements OnItemClickListener {

@Override

public void onItemClick(AdapterView<?> parent, View view, int position,

long id) {

if(mp3Infos != null) {

Mp3Info mp3Info = mp3Infos.get(position);

Log.d(“mp3Info–>”, mp3Info.toString());

Intent intent = new Intent();

intent.putExtra(“url”, mp3Info.getUrl());

intent.putExtra(“MSG”, AppConstant.PlayerMsg.PLAY_MSG);

intent.setClass(MainActivity.this, PlayerService.class);

startService(intent); //启动服务

}

}

}

3.   定义一个继承Service的服务类PlayerServie(未完善的Service类)

package com.wwj.sb.service;

import android.annotation.SuppressLint;

import android.app.Service;

import android.content.Intent;

import android.media.MediaPlayer;

import android.media.MediaPlayer.OnPreparedListener;

import android.os.IBinder;

import com.wwj.sb.domain.AppConstant;

@SuppressLint(“NewApi”)

public class PlayerService extends Service {

private MediaPlayer mediaPlayer = new MediaPlayer(); //媒体播放器对象

private String path; //外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

资料获取→专栏
音乐文件路径

private boolean isPause; //暂停状态

@Override

public IBinder onBind(Intent arg0) {

return null;

}

@Override

public int onStartCommand(Intent intent, int flags, int startId) {

if(mediaPlayer.isPlaying()) {

stop();

}

path = intent.getStringExtra(“url”);

int msg = intent.getIntExtra(“MSG”, 0);

if(msg == AppConstant.PlayerMsg.PLAY_MSG) {

play(0);

} else if(msg == AppConstant.PlayerMsg.PAUSE_MSG) {

pause();

} else if(msg == AppConstant.PlayerMsg.STOP_MSG) {

stop();

}

return super.onStartCommand(intent, flags, startId);

}

/**

  • 播放音乐

  • @param position

*/

private void play(int position) {

try {

mediaPlayer.reset();//把各项参数恢复到初始状态

mediaPlayer.setDataSource(path);

mediaPlayer.prepare(); //进行缓冲

mediaPlayer.setOnPreparedListener(new PreparedLis
tener(position));//注册一个监听器

}

catch (Exception e) {

e.printStackTrace();

}

}

/**

  • 暂停音乐

*/

private void pause() {

if (mediaPlayer != null && mediaPlayer.isPlaying()) {

mediaPlayer.pause();

isPause = true;

}

}

/**

  • 停止音乐

*/

private void stop(){

if(mediaPlayer != null) {

mediaPlayer.stop();

try {

mediaPlayer.prepare(); // 在调用stop后如果需要再次通过start进行播放,需要之前调用prepare函数

} catch (Exception e) {

e.printStackTrace();

}

}

}

@Override

public void onDestroy() {

if(mediaPlayer != null){

mediaPlayer.stop();

mediaPlayer.release();

}

}

}

/**

  • 停止音乐

*/

private void stop(){

if(mediaPlayer != null) {

mediaPlayer.stop();

try {

mediaPlayer.prepare(); // 在调用stop后如果需要再次通过start进行播放,需要之前调用prepare函数

} catch (Exception e) {

e.printStackTrace();

}

}

}

@Override

public void onDestroy() {

if(mediaPlayer != null){

mediaPlayer.stop();

mediaPlayer.release();

}

}

  • 30
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值