如何制作android本地的音乐播放器呢?步骤通常是如下:

1.在清单文件AndroidMainFest.xml文件当中添加权限。

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

2.需要找到当前module的build.gradle文件当中targetSdkVersion对应的版本号改为22.(此处与6.0的动态申请权限相关,可以在代码当中申请,此处就使用简单的一次申请方式)

3.绘制布局的内容:需要绘制的布局分为两个部分:1.activity对应的布局    2.listview的每一个item对应的布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@mipmap/bg"><ListViewandroid:id="@+id/local_music_lv"android:layout_width="match_parent"android:layout_height="match_parent"android:divider="#bbb"android:dividerHeight="1dp"></ListView><RelativeLayoutandroid:background="#eee"android:layout_width="match_parent"android:layout_height="80dp"android:focusableInTouchMode="true"android:layout_alignParentBottom="true"><ImageViewandroid:id="@+id/local_music_iv"android:layout_width="60dp"android:layout_height="60dp"android:layout_centerVertical="true"android:layout_marginLeft="20dp"android:src="@mipmap/music_icon"/><TextViewandroid:id="@+id/local_music_song"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="歌名"android:singleLine="true"android:ellipsize="end"android:textSize="16sp"android:textStyle="bold"android:layout_toRightOf="@+id/local_music_iv"android:layout_marginTop="10dp"android:layout_marginLeft="10dp"/><TextViewandroid:id="@+id/local_music_singer"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="周杰伦"android:textSize="12sp"android:layout_toRightOf="@+id/local_music_iv"android:layout_alignLeft="@+id/local_music_song"android:layout_below="@+id/local_music_song"android:layout_marginTop="5dp"/><ImageViewandroid:id="@+id/local_music_last"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignTop="@+id/local_music_singer"android:layout_centerHorizontal="true"android:onClick="onClick"app:srcCompat="@mipmap/last" /><ImageViewandroid:id="@+id/local_music_next"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentEnd="true"android:layout_alignParentRight="true"android:layout_alignTop="@+id/local_music_singer"android:layout_marginEnd="30dp"android:layout_marginRight="30dp"android:onClick="onClick"app:srcCompat="@mipmap/next" /><ImageViewandroid:id="@+id/local_music_play"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignTop="@+id/local_music_singer"android:layout_marginEnd="40dp"android:layout_marginRight="40dp"android:onClick="onClick"android:layout_toLeftOf="@+id/local_music_next"android:layout_toStartOf="@+id/local_music_next"app:srcCompat="@mipmap/play" /></RelativeLayout>
</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"android:padding="10dp"><TextViewandroid:id="@+id/item_music_id"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="1"android:textSize="24sp"android:textStyle="bold"android:layout_centerVertical="true"/><TextViewandroid:id="@+id/item_music_sing"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="玫瑰花的葬礼"android:textSize="18sp"android:textStyle="bold"android:singleLine="true"android:ellipsize="end"android:layout_marginLeft="20dp"android:layout_toRightOf="@+id/item_music_id"/><TextViewandroid:id="@+id/item_music_singer"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="许嵩"android:textSize="14sp"android:textColor="#888"android:layout_marginTop="10dp"android:layout_alignLeft="@+id/item_music_sing"android:layout_below="@+id/item_music_sing"/><TextViewandroid:id="@+id/line"android:layout_width="2dp"android:layout_height="20dp"android:background="#ccc"android:layout_toRightOf="@+id/item_music_singer"android:layout_alignTop="@+id/item_music_singer"android:layout_marginLeft="10dp"android:layout_marginRight="10dp"/><TextViewandroid:id="@+id/item_music_album"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="专辑名称"android:layout_marginTop="10dp"android:textSize="14sp"android:textColor="#888"android:ellipsize="end"android:singleLine="true"android:layout_toRightOf="@+id/line"android:layout_below="@+id/item_music_sing"/><TextViewandroid:id="@+id/item_music_time"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="14sp"android:layout_below="@+id/item_music_singer"android:text="4:30"android:layout_alignParentRight="true"/></RelativeLayout>

4.开始写java代码,首先需要写一个保存本地的音乐信息的类。

package com.animee.day09.demo01;
public class MusicInfo {private String id;private String singName;private String singer;private String alumb;private String time;private String path;public String getPath() {return path;}public void setPath(String path) {this.path = path;}public MusicInfo(String id, String singName, String singer, String alumb, String time, String path) {this.id = id;this.singName = singName;this.singer = singer;this.alumb = alumb;this.time = time;this.path = path;}@Overridepublic String toString() {return "MusicInfo{" +"id='" + id + '\'' +", singName='" + singName + '\'' +", singer='" + singer + '\'' +", alumb='" + alumb + '\'' +", time='" + time + '\'' +'}';}public MusicInfo() {}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getSingName() {return singName;}public void setSingName(String singName) {this.singName = singName;}public String getSinger() {return singer;}public void setSinger(String singer) {this.singer = singer;}public String getAlumb() {return alumb;}public void setAlumb(String alumb) {this.alumb = alumb;}public String getTime() {return time;}public void setTime(String time) {this.time = time;}public MusicInfo(String id, String singName, String singer, String alumb, String time) {this.id = id;this.singName = singName;this.singer = singer;this.alumb = alumb;this.time = time;}
}

然后开始写activity当中的逻辑代码:

public class LocalMusicActivity extends AppCompatActivity {private ListView lv;private List<MusicInfo>mDatas = new ArrayList<>();private LocalMusicAdapter adapter;private TextView singNameTv;private TextView singerTv;private MediaPlayer mediaPlayer;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_local_music);
//lv = (ListView) findViewById(R.id.local_music_lv);singNameTv = (TextView) findViewById(R.id.local_music_song);singerTv = (TextView) findViewById(R.id.local_music_singer);
//        设置数据源
//        设置适配器adapter = new LocalMusicAdapter(this,mDatas);lv.setAdapter(adapter);
//        加载本地音乐loadLocalData();
//      初始化媒体播放器mediaPlayer = new MediaPlayer();
//        设置点击事件lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long id) {MusicInfo info = mDatas.get(position);singerTv.setText(info.getSinger());singNameTv.setText(info.getSingName());
//                因为有可能其他音乐正在被播放,所以要先停止在播放stopMusic();
//                播放音乐mediaPlayer.reset();try {mediaPlayer.setDataSource(info.getPath());playMusic();} catch (IOException e) {e.printStackTrace();}}});}private void loadLocalData() {
//        1.获得ContentResolver对象ContentResolver resolver = getContentResolver();
//        2.获得Uri地址Uri musicUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
//        3.查找地址中的内容Cursor cursor = resolver.query(musicUri, null, null, null, null);
//        4.遍历Cursor信息int id= 0;while (cursor.moveToNext()) {String title = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE));  //不带后缀的歌曲名String display_name = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME)); //带后缀Log.i("xiaozhi", "loadLocalData: title==="+title+",display===="+display_name);String singer = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST));  //歌手
//            路劲String path = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));String album = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM));long duration = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.DURATION));SimpleDateFormat sdf = new SimpleDateFormat("mm:ss");String time = sdf.format(new Date(duration));id++;String idStr = id+"";MusicInfo info = new MusicInfo(idStr,title,singer,album,time,path);mDatas.add(info);}adapter.notifyDataSetChanged();}/*** 播放音乐* */public void playMusic(){if (mediaPlayer!=null&&!mediaPlayer.isPlaying()) {try {mediaPlayer.prepare();  //准备播放,因为sd卡当中的音乐,所以不写异步准备mediaPlayer.start();} catch (IOException e) {e.printStackTrace();}}}/*** 停止音乐* */public void stopMusic(){if (mediaPlayer!=null&&mediaPlayer.isPlaying()) {mediaPlayer.pause();mediaPlayer.seekTo(0);mediaPlayer.stop();}}@Overrideprotected void onDestroy() {super.onDestroy();stopMusic();}
}

使用列表当中显示的是音乐播放器的内容,所以通过适配器添加数据,以下为适配器的代码:

package com.animee.day09.demo01;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import com.animee.day09.R;
import java.util.List;
public class LocalMusicAdapter extends BaseAdapter{private Context context;private List<MusicInfo>mDatas;public LocalMusicAdapter(Context context, List<MusicInfo> mDatas) {this.context = context;this.mDatas = mDatas;}@Overridepublic int getCount() {return mDatas.size();}@Overridepublic Object getItem(int position) {return mDatas.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder holder = null;if (convertView==null) {convertView = LayoutInflater.from(context).inflate(R.layout.item_local_music,null);holder = new ViewHolder(convertView);convertView.setTag(holder);}else{holder = (ViewHolder) convertView.getTag();}MusicInfo musicInfo = mDatas.get(position);holder.idTv.setText(musicInfo.getId());holder.titleTv.setText(musicInfo.getSingName());holder.alubmTv.setText(musicInfo.getAlumb());holder.singerTv.setText(musicInfo.getSinger());holder.timeTv.setText(musicInfo.getTime());return convertView;}class ViewHolder{TextView idTv,titleTv,singerTv,alubmTv,timeTv;public ViewHolder(View itemView){idTv = (TextView) itemView.findViewById(R.id.item_music_id);titleTv = (TextView) itemView.findViewById(R.id.item_music_sing);singerTv = (TextView) itemView.findViewById(R.id.item_music_singer);alubmTv = (TextView) itemView.findViewById(R.id.item_music_album);timeTv = (TextView) itemView.findViewById(R.id.item_music_time);}}
}

然后简单的音乐播放器就完成了,但是只能够显示和播放,在下一篇博客中,添加播放,暂停,以及上一曲和下一曲的功能。

效果图如下:
												

Android本地音乐播放器的制作相关推荐

  1. 基于Python实现本地音乐播放器的制作

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

  2. android音乐播放器扫描本地,简单实现Android本地音乐播放器

    搜索热词 音乐播放需要调用service,在此,只是简单梳理播放流程. public class PlayMusicService extends Service { //绑定服务 调用服务的方法. ...

  3. 炫 音乐可视化 html5 在线,HTML5打造的炫酷本地音乐播放器-喵喵Player

    将之前捣腾的音乐频谱效果加上一个播放列表就成了现在的喵喵播放器(Meow meow Player,额知道这名字很二很装萌~),全HTML5打造的网页程序,可本地运行也可以挂服务器上用. 在线Demo及 ...

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

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

  5. 利用PyQt5制作本地音乐播放器

    介绍 本文是对之前的音乐播放器的一些改进和功能实现.只写了有变化的部分,具体部分请看上一篇博客. [利用PyQt5和QSS制作本地音乐播放器(初稿)](https://blog.csdn.net/we ...

  6. Android MediaPlayer 音乐播放器扫描 本地音乐、上一曲、下一曲切歌、播放本地音乐

    Android MediaPlayer 本地音乐播放器 运行截图 项目请在真机(自己的手机)上测试运行,因为我不喜欢用虚拟机. 为了不浪费您的时间,先看一下运行的效果图, 一进去先进行音乐扫描,然后列 ...

  7. Android端本地音乐播放器(一)---前言

    前言: 2018时的记录:大概一周多以前(现在是2018.11.26   15:24)android平台开发的课程结束了,要写大作业,最后决定写这个音乐播放器,因为老师在课堂上讲的例子也是这个,前面的 ...

  8. Android 编程案例-本地音乐播放器源码及使用注意事项

    说一下代码在用的时候注意事项以及在运行的时候可能遇到的问题: 首先代码可以在创建相应文件后直接复制,这个案例用到了RecyclerView,所以需要先添加依赖.添加下面两个: implementati ...

  9. C#制作简单的本地音乐播放器(二)—— 显示歌词

    此篇文章主要补充 C#制作简单的本地音乐播放器(一) 中的"歌词显示"部分的内容. 页面设计部分 相关内容 本程序使用的歌词文件为lrc格式,lrc是英文lyric(歌词)的缩写, ...

  10. 利用PyQt5和QSS制作本地音乐播放器(初稿)

    制作缘由 本来我是通过活动白嫖了某云音乐的黑胶VIP的,当时我下了很多VIP才能听整首的歌.但是VIP过期后,这音乐就播放不了了,一方面是它VIP歌曲存储为.ncm文件,另一方面是我将这ncm文件解码 ...

最新文章

  1. Martini 中的 Handler
  2. bug修复录-qq浏览器中post请求时body为空
  3. go语言高性能缓存组件ccache分析
  4. et超排真正免狗能用版 真正好用的东西_真正合格小户型,收纳都特别能“装”...
  5. STM32H743-梳理ADC模数转换器在CubeMX上的配置
  6. 【面试题】序列化的 10 几个问题
  7. div css网页设计源代码_HTML+CSS网页设计,企业网站资讯文章布局样式
  8. 2017 部门文化宣贯会议内容
  9. python 文件复制中出现 Python3之由通用字符名称“\u202A”表示的字符不能在当前代码页中表示出来
  10. QT出现“d:\Program Files (x86)\SogouInput\Components\”问题初步想法
  11. 计算机Excel应用案例,Excel VBA在Office中的应用案例
  12. sinx加expx定积分计算c语言,8.13 写一个用矩阵法求定积分的通用函数,分别求 sinx,cosx,exp(x)的积分;...
  13. 一文学会最常见的10种NLP处理技术(附资源代码)
  14. 当你的MS OFFICE打不开时,安全模式也失效,来看我给你变戏法吧
  15. C语言运行时间过长假死,解决xcode打开时loading假死的问题
  16. 何谓差模信号?何谓共模信号?
  17. C语言之基本算法15—前三位和后三位都是完全平方数的六位完全平方数
  18. 安科瑞企业微电网能效管理平台在某食品加工厂35kV变电站应用分析
  19. 任何值得去的地方,都没有捷径。
  20. 怎么用ai做出适量插画_怎么用AI和AE制作矢量插画风猫咪动效

热门文章

  1. java ffmpeg amr mp3_使用ffmpeg实现 amr转mp3
  2. toolchain安装教程支持_Ubuntu安装ARM架构GCC工具链(ubuntu install ARM toolchain)最简单办法...
  3. 华为交换机端口基本配置指南
  4. 【转载】python做图像的傅里叶变换——二维傅里叶变换
  5. 第一章、银行会计的基本原理和基本核算方法
  6. 在线html转txt文件,html网页转txt文件、文本转换器
  7. oracle学习札记95
  8. 使用 AppFuse 的七个理由学习
  9. UE4.27 Live Link Face无法连接的一种解决办法
  10. flash砸金蛋_砸金蛋flash课件模版-幸运抽奖随机抽题-多媒体交互式flash游戏课件模版...