思路

首先是扫描本地所有的音频文件,然后全部装进集合当中,接下来就是用ListView展示在屏幕上,大概就是这几个步骤了,接下来细讲

创建一个容器

进行过数据解析的朋友都应该知道JavaBean吧,用来装载解析出来的数据,我们这里同样也要创建一个JavaBean,用来装载扫描到的音频文件,具体的代码是:
<pre name="code" class="html">package com.duanlian.mymusicplayerdemo.bean;/*** Created by user on 2016/6/24.* 放置音乐*/
public class Song {/*** 歌手*/public String singer;/*** 歌曲名*/public String song;/*** 歌曲的地址*/public String path;/*** 歌曲长度*/public int duration;/*** 歌曲的大小*/public long size;
}

创建一个用来扫描本地音频的工具类

类里面定义一个扫描本地音频的方法,其返回值是一个list集合,集合里面装的泛型就是上一步创建的JavaBean,具体代码如下:
package com.duanlian.mymusicplayerdemo.utils;import android.content.Context;
import android.database.Cursor;
import android.provider.MediaStore;import com.duanlian.mymusicplayerdemo.bean.Song;import java.util.ArrayList;
import java.util.List;/*** 音乐工具类,*/
public class MusicUtils {/*** 扫描系统里面的音频文件,返回一个list集合*/public static List<Song> getMusicData(Context context) {List<Song> list = new ArrayList<Song>();// 媒体库查询语句(写一个工具类MusicUtils)Cursor cursor = context.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null,null, MediaStore.Audio.AudioColumns.IS_MUSIC);if (cursor != null) {while (cursor.moveToNext()) {Song song = new Song();song.song = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME));song.singer = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST));song.path = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA));song.duration = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DURATION));song.size = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.SIZE));if (song.size > 1000 * 800) {// 注释部分是切割标题,分离出歌曲名和歌手 (本地媒体库读取的歌曲信息不规范)if (song.song.contains("-")) {String[] str = song.song.split("-");song.singer = str[0];song.song = str[1];}list.add(song);}}// 释放资源cursor.close();}return list;}/*** 定义一个方法用来格式化获取到的时间*/public static String formatTime(int time) {if (time / 1000 % 60 < 10) {return time / 1000 / 60 + ":0" + time / 1000 % 60;} else {return time / 1000 / 60 + ":" + time / 1000 % 60;}}
}

好了,当我们调用这个类的这个扫描的方法,就可以得到一个里面装有本地音频的的list集合了,但是在这之前还得添加一个权限:让这个程序可以读取手机本地的文件,在AndroidManifest.xlm里面添加权限,具体如下:

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

数据展示

ListView展示数据需要配合Adapter一起使用,而Adapter里面需要传一个上下文,一个数据源,上下文直接能拿到,数据源上面我们已经拿到了,接下来是写ListView和Adapter的编写,先看看MainActivity的布局文件,非常简单:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context="com.duanlian.mymusicplayerdemo.MainActivity"><TextViewandroid:id="@+id/main_textview"android:layout_width="match_parent"android:layout_height="40dp"android:gravity="center"android:text="我的音乐" /><ListViewandroid:id="@+id/main_listview"android:layout_below="@+id/main_textview"android:layout_width="match_parent"android:layout_height="match_parent"/>
</RelativeLayout>

接下来就是MainActivity里面的编写,具体代码:

package com.duanlian.mymusicplayerdemo;import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ListView;import com.duanlian.mymusicplayerdemo.adapter.MyAdapter;
import com.duanlian.mymusicplayerdemo.bean.Song;
import com.duanlian.mymusicplayerdemo.utils.MusicUtils;import java.util.ArrayList;
import java.util.List;public class MainActivity extends AppCompatActivity {private ListView mListView;private List<Song> list;private MyAdapter adapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();}/*** 初始化view*/private void initView() {mListView = (ListView) findViewById(R.id.main_listview);list = new ArrayList<>();//把扫描到的音乐赋值给listlist = MusicUtils.getMusicData(this);adapter = new MyAdapter(this,list);mListView.setAdapter(adapter);}
}

是不是很简单,就定义一个ListView并且绑定Adapter,接下来就Adapter得编写:

package com.duanlian.mymusicplayerdemo.adapter;import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;import com.duanlian.mymusicplayerdemo.MainActivity;
import com.duanlian.mymusicplayerdemo.R;
import com.duanlian.mymusicplayerdemo.bean.Song;
import com.duanlian.mymusicplayerdemo.utils.MusicUtils;import java.util.List;public class MyAdapter extends BaseAdapter {private Context context;private List<Song> list;public MyAdapter(MainActivity mainActivity, List<Song> list) {this.context = mainActivity;this.list = list;}@Overridepublic int getCount() {return list.size();}@Overridepublic Object getItem(int i) {return list.get(i);}@Overridepublic long getItemId(int i) {return i;}@Overridepublic View getView(int i, View view, ViewGroup viewGroup) {ViewHolder holder = null;if (view == null) {holder = new ViewHolder();//引入布局view = View.inflate(context, R.layout.item_music_listview, null);//实例化对象holder.song = (TextView) view.findViewById(R.id.item_mymusic_song);holder.singer = (TextView) view.findViewById(R.id.item_mymusic_singer);holder.duration = (TextView) view.findViewById(R.id.item_mymusic_duration);holder.position = (TextView) view.findViewById(R.id.item_mymusic_postion);view.setTag(holder);} else {holder = (ViewHolder) view.getTag();}//给控件赋值holder.song.setText(list.get(i).song.toString());holder.singer.setText(list.get(i).singer.toString());//时间需要转换一下int duration = list.get(i).duration;String time = MusicUtils.formatTime(duration);holder.duration.setText(time);holder.position.setText(i+1+"");return view;}class ViewHolder{TextView song;//歌曲名TextView singer;//歌手TextView duration;//时长TextView position;//序号}}

ListView都需要一个item,具体代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="110dp"android:orientation="horizontal"android:gravity="center_vertical"android:padding="5dp"><TextViewandroid:id="@+id/item_mymusic_postion"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_margin="10dp"android:text="1"android:gravity="center"android:textColor="#0d0c0c"android:textSize="18sp" /><RelativeLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="20dp"><TextViewandroid:id="@+id/item_mymusic_song"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="歌曲名"android:textColor="#0d0c0c"android:textSize="20dp" /><TextViewandroid:id="@+id/item_mymusic_singer"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_below="@+id/item_mymusic_song"android:text="歌手"android:textColor="#0d0c0c"android:textSize="15sp" /><TextViewandroid:id="@+id/item_mymusic_duration"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_below="@+id/item_mymusic_song"android:layout_marginLeft="15dp"android:textColor="#0d0c0c"android:layout_toRightOf="@+id/item_mymusic_singer"android:text="时间"android:textSize="15sp" /></RelativeLayout></LinearLayout>

运行效果


demo下载地址:http://download.csdn.net/detail/dl10210950/9607682

Android音乐播放器制作(一)扫描本地音乐显示在手机上相关推荐

  1. Android音乐播放器制作(二 )点击歌曲实现播放

    上次我们实现了把手机里的音频扫描到,然后放在list集合里面,用ListView展示在手机界面上,如果没有看过的可以去看看本人的博客:Android音乐播放器制作(一)扫描本地音乐显示在手机上 这次是 ...

  2. Android 音乐播放器制作(带有通知栏、Widget小挂件)

    Android 音乐播放器制作(带有通知栏显示.Widget小挂件) 我用的开发工具是AndroidStudio,我的手机是Android7.1.2,我的另一个测试手机是Android8.0. 整个项 ...

  3. 使用Vitamio打造自己的Android万能播放器(4)——本地播放(快捷搜索、数据存储)...

    前言 关键字:Vitamio.VPlayer.Android播放器.Android影音.Android开源播放器 本章节把Android万能播放器本地播放的主要功能(缓存播放列表和A-Z快速查询功能) ...

  4. flash音乐播放器 制作教程

    flash音乐播放器 制作教程 2011年09月24日 [b]请下载最新CMP v2.1正式版:[/b] [b]http://linsu.sz17399.com/cmp21/cmp21.rar[/b] ...

  5. 基于Qt的音乐播放器制作

    基于Qt的音乐播放器制作 使用浏览器自带工具抓包歌曲资源 开发人员工具抓包 点击浏览器右上角的 "-" 快捷键(Alt + F): 点击其中的"更多工具" ➡ ...

  6. 音乐播放器制作一(Windows Media Player控件)

    VS2013 MFC做音乐播放器,需要使用到ActiveX控件(Windows Media Player),可以播放音视频,支持歌单添加,删除,保存操作,支持循环,顺序,随机播放.   话不多说,先来 ...

  7. 如何在php中添加音乐播放器,window_Win10自带Groove音乐播放器怎么使用?,《Groove音乐》是微软在Win10系 - phpStudy...

    Win10自带Groove音乐播放器怎么使用? <Groove音乐>是微软在Win10系统上推出的一款最新的音乐播放器,从而替代了之前的Xbox Music.而今天<Groove音乐 ...

  8. html音乐播放器代码自动,html5 css3音乐播放器代码

    特效描述:html5 css3 音乐播放器代码.html5 css3音乐播放器代码 代码结构 1. 引入CSS 2. 引入JS 3. HTML代码 标题歌手 00:00/00:00 var music ...

  9. python实现在线音乐播放器(懒皮鼠音乐)

    python实现在线音乐播放器(懒皮鼠音乐) 利用qt设计requests库实现在线音乐播放 文章目录 python实现在线音乐播放器(懒皮鼠音乐) 前言 一.qt设计师设计界面 二.使用步骤 1.引 ...

  10. python 本地音乐播放器制作过程

    制作这个播放器的目的是为了将下载下来的mp3文件进行随机或是顺序的播放.选择需要播放的音乐的路径,选择播放方式,经过测试可以完美的播放本地音乐. [阅读全文] 在开始之前介绍一个免费下载mp3音乐的网 ...

最新文章

  1. Java代理系列-动态代理
  2. C#实现打印与打印预览功能
  3. Linux下mknod的作用,Linux系统mknod命令用法
  4. 分布式入门,怎样用PyTorch实现多GPU分布式训练
  5. 浅谈ios设计之使用表格UITableVIew设计通讯录的方法
  6. SQLite学习-临时文件
  7. linux命令总结----转载
  8. java中会存在内存泄漏吗,请简单描述
  9. tar 解压zip_Keka for mac(压缩解压工具)
  10. mysql signed 长度_浅谈mysql字段长度设置
  11. win11天气小组件如何开启 Windows11开启天气组件的设置方法
  12. Windows按键翻译
  13. 初识 Powershell 5.0 class
  14. ImageJ Merge荧光图片
  15. PHP网页表单输入框输入字符简体繁体互转(非JS)
  16. 教你用Python感受量子霸权
  17. Genesis创世纪
  18. Unity网页插件Embedded Browser(ZFBrowser)打包文件无法加载本地网页或网站网址解决方法
  19. SylixOS 经得起检验的国产操作系统 (四)
  20. tagName和nodeName的区别

热门文章

  1. 三国杀ol服务器维护时间 11月6日,三国杀ol11月6日更新一览 聚宝盆功能上线
  2. 适合普通人的竞争策略
  3. 5-3 外星人颜色#1
  4. gitlab运行后修改存储位置
  5. PCIE--1--概念认知
  6. 网络攻防学习心得一(20159320)学习小结
  7. 什么是空热量的食物?“空热量”的谬论
  8. 结合webpack 一步一步实现懒加载的国际化简易版方案
  9. 安得广厦千万间,大赚天下寒士俱欢颜
  10. 把对象按照ASCII码排序