论自作音乐播放器涉及知识点总结

1.内容提供者查找手机SD卡下的音乐

配置读取SD卡权限

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

//调用方法List<Good>  list = GetMusic.Music(MainActivity.this);

package com.bawei.day07_music;

import java.util.ArrayList;

import com.bawei.vo.Good;

import android.content.ContentResolver;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.provider.MediaStore;
import android.provider.MediaStore.Audio;

public class GetMusic {

    public static ArrayList<Good> Music(Context context) {
        ContentResolver resolver = context.getContentResolver();
        // 内容提供者访问MediaStore.Audio.Media.EXTERNAL_CONTENT_URI
        Cursor cursor = resolver.query(
                MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null,
                null);
        ArrayList<Good> list=new ArrayList<Good>();
        while (cursor.moveToNext()) {
            // 名字
            String name = cursor.getString(cursor
                    .getColumnIndex(Audio.Media.TITLE));
            // 专辑名
            String album = cursor.getString(cursor
                    .getColumnIndexOrThrow(Audio.Media.ALBUM));
            // 歌手名
            String artist = cursor.getString(cursor
                    .getColumnIndexOrThrow(Audio.Media.ARTIST));
            // URI歌曲文件存放路径
            String path = cursor.getString(cursor
                    .getColumnIndexOrThrow(Audio.Media.DATA));
            // 歌曲文件播放时间长度
            int duration = cursor.getInt(cursor
                    .getColumnIndexOrThrow(Audio.Media.DURATION));
            // 音乐文件大小
            int size = cursor.getInt(cursor
                    .getColumnIndexOrThrow(Audio.Media.SIZE));
            //保存到集合
            list.add(new Good(name,artist,path,false));
        }
        return list;
    }
}

2.播放音乐

//播放音乐
    private void startMusic(int arg0) {
        //让上一首停下
        if (player != null && player.isPlaying()) {
            player.stop();
            player.reset();
            player = null;

        }

        try {
            //播放器
            player = new MediaPlayer();
            //播放路径
            player.setDataSource(list.get(arg0).getMusic());
            //准备
            player.prepare();
            //播放
            player.start();
            //得到歌曲总进度
            c = player.getDuration();
            //给进度条seekbar设置最大值
            seekBar.setMax(c);
            //timer
            time();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

//timer
    private void time() {
        // TODO Auto-generated method stub
        //timer
        timer = new Timer();
        //播放进度100毫秒前进一下
        timer.schedule(new TimerTask() {

            private int d;

            @Override
            public void run() {
                // TODO Auto-generated method stub
                //得到当前播放进度
                d = player.getCurrentPosition();
                //赋给seekbar
                seekBar.setProgress(d);                //handler传值 显示时间
                Message message = Message.obtain();
                message.arg1 = c;
                message.arg2 = d;
                handler.sendMessage(message);

            }
        }, 0, 100);
    }

    //显示时间
    Handler handler = new Handler() {
        public void handleMessage(Message msg) {
            //当前进度
            int cu1 = msg.arg1;
            //总长度
            int cu2 = msg.arg2;
            //转换成时间格式
            SimpleDateFormat sim = new SimpleDateFormat("mm:ss");
            String cur1 = sim.format(cu1);
            String cur2 = sim.format(cu2);
            //赋给textview
            text1.setText(cur2);
            text2.setText(cur1);

        };
    };

3.暂停继续播放

                  if (player != null) {
                        //音乐暂停
                        player.pause();
                        //得到当前seekBar进度
                        m = seekBar.getProgress();
                    }
                       //继续播放
                        player.seekTo(m);

4.seekbar调整音乐播放进度

    //seekbar调整音乐播放进度
                        seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

                            public void onStopTrackingTouch(SeekBar seekBar) {
                                // TODO Auto-generated method stub
                                if (player != null) {
                                     //得到当前拖拽的进度
                                    player.seekTo(seekBar.getProgress());                                     //timer
                                    timecan();                                    //timer计时
                                    time();

                                }
                            }

                            public void onStartTrackingTouch(SeekBar seekBar) {
                                // TODO Auto-generated method stub
                                //清空timer
                                timecan();
                            }

                            public void onProgressChanged(SeekBar seekBar,
                                    int progress, boolean fromUser) {
                                // TODO Auto-generated method stub

                            }
                        });

 ////清空timer
    private void timecan() {
        // TODO Auto-generated method stub
        if (timer != null) {
            timer.cancel();
        }
    }

5.Intent跳转传list集合

先把List<>改为ArrayList<>

ArrayList<Good> list=new ArrayList<Good>();
Intent intent = new Intent(MainActivity.this,InfoActivity.class);  intent.putExtra("list", list);
startActivity(intent);
Intent intent = getIntent();
ArrayList<Good> list= (ArrayList<Good>) intent.getSerializableExtra("list");
时间: 2024-10-29 10:46:24

论自作音乐播放器涉及知识点总结的相关文章

Android开发实战之简单音乐播放器

最近开始学习音频相关.所以,很想自己做一个音乐播放器,于是,花了一天学习,将播放器的基本功能实现了出来.我觉得学习知识点还是蛮多的,所以写篇博客总结一下关于一个音乐播放器实现的逻辑.希望这篇博文对你的学习和生活有所帮助.效果图: **实现逻辑** 在市面上的音乐播放app,即时你关了.那么一样会在后台播放,所以播放的逻辑应该写在Service中.并且能够实现Service和Activity之间进行通信.那么Service是四大组件之一,所以在使用的时候一定不要忘了在配置文件中声明一下. <ser

iOS开发拓展篇—音频处理(音乐播放器1

iOS开发拓展篇—音频处理(音乐播放器1) 说明:该系列文章通过实现一个简单的音乐播放器来介绍音频处理的相关知识点,需要重点注意很多细节的处理. 一.调整项目的结构,导入必要的素材 调整后的项目结构如下: 二.新建两个控制器 (1)新建一个控制器,用于展示音乐文件列表界面,其继承自UITableViewController (2)新建一个控制器,用于展示播放界面,其继承自UIViewController (3)在storyboard中,把之前的控制器删除,换上一个导航控制器,设置tableVie

iOS开发拓展篇—音频处理(音乐播放器1)

说明:该系列文章通过实现一个简单的音乐播放器来介绍音频处理的相关知识点,需要重点注意很多细节的处理. 一.调整项目的结构,导入必要的素材 调整后的项目结构如下: 二.新建两个控制器 (1)新建一个控制器,用于展示音乐文件列表界面,其继承自UITableViewController (2)新建一个控制器,用于展示播放界面,其继承自UIViewController (3)在storyboard中,把之前的控制器删除,换上一个导航控制器,设置tableViewController与之前新建的控制器类进

jQuery仿QQ音乐播放器

本文通过Html+CSS+jQuery开发仿QQ版的音乐播放器,是前端技术的综合应用,所用素材来源于网络,仅供学习分享使用,如有不足之处,还请指正. 涉及知识点 在本例中用到的知识点如下,按jQuery和CSS进行区分: jQuery 是一个 JavaScript 库, 极大地简化了 JavaScript 编程,常见知识点如下: 通过标签获取jQuery对象:var $audio =$("audio"); 通过选择符获取jQuery对象并设置文本内容:$(".music_pr

web音乐播放器

今天闲暇时间,花了2小时,写了个简单音乐播放器.欢迎大家来吐糟 先看下界面截图 大体实现:播放,停止,上一曲,下一曲,循环播放功能. 知识点:1.html 中audio 2.css 位置fixed 其中audio用到的方法:1.play 2.pause ,属性:1.src 2.loop 对于audio不熟悉的移步到http://www.w3school.com.cn/jsref/dom_obj_audio.asp 其中数据部分是在网上找了的保存在listrings.js中 下边关键时刻代码来了

用PHP+H5+Boostrap做简单的音乐播放器(进阶版)

前言:之前做了一个音乐播放器(纯前端),意外的受欢迎,然后有人建议我把后台一起做了,正好也想学习后台,所以学了两天php(不要吐槽我的速度,慢工出细活嘛~)然后在之前的基础上也又完善了一些功能,所以这个Demo比之前的可以算是进阶呢~v2.0哈哈哈~感觉截图体验很不好呢,所以在美图秀秀上面做了简易的动图,大家感受感受 正文: 老规矩,先上图~感觉有点卡,愿意等的就等等嘛,不愿意等的,往下看,有图片讲解 功能实现: 1.点击音乐列表播放音乐 2.拖动或点击进度条,调节音乐播放进度 3.浮动到音量控

用H5+Boostrap做简单的音乐播放器

用H5+Boostrap做简单的音乐播放器 前言:这个是综合一下我最近在学的东西做的小Demo,到实际使用还有距离,但是用来练手巩固知识点还是不错的,最近在二刷JS书和Boostrap.css的源码,做完这个Demo也算是暂告一段落,接下来是jQuery的源码和Boostrap.js的源码,任务很艰巨呢,加油~在此就不整篇的贴代码了,如果感兴趣的小伙伴可以发消息给我,可以把代码传给你们~ 正文: 先上效果图 1.布局:Boostrap里的响应式和自适应布局是自然跑不掉的,container中嵌套

H5+Boostrap的音乐播放器

H5+Boostrap做简单的音乐播放器 前言:这个是综合一下我最近在学的东西做的小Demo,到实际使用还有距离,但是用来练手巩固知识点还是不错的,最近在二刷JS书和Boostrap.css的源码,做完这个Demo也算是暂告一段落,接下来是jQuery的源码和Boostrap.js的源码,任务很艰巨呢,加油~在此就不整篇的贴代码了,如果感兴趣的小伙伴可以发消息给我,可以把代码传给你们~ 正文: 先上效果图 1.布局:Boostrap里的响应式和自适应布局是自然跑不掉的,container中嵌套r

iOS开发拓展篇—音频处理(音乐播放器2)

iOS开发拓展篇—音频处理(音乐播放器2) 说明:该文主要介绍音乐播放界面的搭建. 一.跳转 1.跳转到音乐播放界面的方法选择 (1)使用模态跳转(又分为手动的和自动的) (2)使用xib并设置跳转 2.两种方法的分析 可以使用模态的方法,添加一个控制器,让这个控制器和音乐播放控制器类进行关联,脱线,设置标识符且在cell的点击事件中执行segue即可. 步骤说明: (1)在storyboard中新拖入一个控制器,然后设置和playing控制器类相关联. (2)设置手动跳转 (3)设置segue