博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
安卓实训项目报告:基于存储卡音乐播放器V0.3
阅读量:3971 次
发布时间:2019-05-24

本文共 3571 字,大约阅读时间需要 11 分钟。

文章目录

项目功能

在基于存储卡音乐播放器V0.2基础上,增加功能:

添加一个音乐播放列表(显示歌名)
– 单击某一首音乐就立刻播放,播放进度清零,显示当前音乐的播放时长。
添加一个【上一首】与【下一首】按钮
– 当前音乐为第一首时,单击【上一首】按钮,切换到最后一首音乐。
– 当前音乐为最后一首时,单击【下一首】按钮,切换到第一首音乐。
– 当某一首音乐播放完毕后,会自动切换到下一首音乐播放。

实现步骤

创建安卓应用

在这里插入图片描述

将图片素材放入drawable

在这里插入图片描述

按钮背景图片选择器

在这里插入图片描述

在项目清单文件里设置安卓应用的图标和授权访问外置存储卡

在这里插入图片描述

主布局资源文件activity_main.xml

在这里插入图片描述

创建music_name_list_item.xml文件

在这里插入图片描述

创建ui子包,将MainActivity拖进ui子包

在这里插入图片描述

创建util字包,在里面创建常用工具类CommonUtils

在这里插入图片描述

package com.zjs.sdcard_music_player_v03.util;import java.text.SimpleDateFormat;/** * 功能:常用工具类 */public class CommonUtils {    private static SimpleDateFormat sdf = new SimpleDateFormat("mm:ss"); // 简单日期格式    /**     * 获取格式化时间     *     * @param time 单位是毫秒     * @return mm:ss格式的时间     */    public static String getFormatTime(int time) {        return sdf.format(time);    }}

创建entity子包,在里面创建Music实体类

在这里插入图片描述

package com.zjs.sdcard_music_player_v03.entity;/** * 功能:音乐实体类 */public class Music {    private String musicName; // 音乐名    public String getMusicName() {        return musicName;    }    public void setMusicName(String musicName) {        this.musicName = musicName;    }    @Override    public String toString() {        return "Music{" +                "musicName='" + musicName + '\'' +                '}';    }}

创建adapter子包,在里面创建音乐适配器 - MusicAdapter

在这里插入图片描述

package com.zjs.sdcard_music_player_v03.adapter;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.zjs.sdcard_music_player_v03.R;import com.zjs.sdcard_music_player_v03.entity.Music;import java.util.List;/** * 功能:音乐适配器 */public class MusicAdapter extends BaseAdapter {    private Context context; // 上下文    private List
musicList; // 音乐列表 /** * 构造方法 * * @param context * @param musicList */ public MusicAdapter(Context context, List
musicList) { this.context = context; this.musicList = musicList; } @Override public int getCount() { return musicList.size(); } @Override public Object getItem(int position) { return musicList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { // 声明视图容器 ViewHolder holder = null; // 判断转换视图是否为空 if (convertView == null) { // 将列表项模板映射成转换视图 convertView = LayoutInflater.from(context).inflate(R.layout.music_name_list_item, null); // 创建视图容器对象 holder = new ViewHolder(); // 实例化转换视图里的控件 holder.tvMusicName = convertView.findViewById(R.id.tvMusicName); // 将视图容器附加到转换视图 convertView.setTag(holder); } else { // 从转换视图里取出视图容器 holder = (ViewHolder) convertView.getTag(); } // 获取列表项要显示的数据 Music music = musicList.get(position); // 设置列表项控件的属性 holder.tvMusicName.setText(music.getMusicName().substring(0, music.getMusicName().lastIndexOf("."))); // 返回转换视图 return convertView; } /** * 视图容器 */ private static class ViewHolder { TextView tvMusicName; }}

主界面类 - MainActivity

声明变量

在这里插入图片描述

通过资源标识符获取控件实例

在这里插入图片描述

存储读写权限

在这里插入图片描述

音乐列表

在这里插入图片描述

设置线程并启动

在这里插入图片描述

创建消息处理器,接收子线程发送的消息

在这里插入图片描述

给音乐列表控件注册监听器

在这里插入图片描述

给媒体播放器注册完成监听器

在这里插入图片描述

获取音乐列表

在这里插入图片描述

播放方法

在这里插入图片描述

暂停方法

在这里插入图片描述

播放|暂停按钮单击事件处理方法

在这里插入图片描述

下一首音乐

在这里插入图片描述

上一首音乐

在这里插入图片描述

上一首|下一首按钮单击事件处理方法

在这里插入图片描述

销毁回调方法,释放资源

在这里插入图片描述

运行效果

在这里插入图片描述

总结

此版本是v0.2个版本中优化得来,以上便是此次总结

转载地址:http://yjtki.baihongyu.com/

你可能感兴趣的文章
C语言详解 - 枚举类型
查看>>
禁止所有的中断(关中断/开中断)
查看>>
禁止所有的中断(关中断/开中断)
查看>>
S3C2410:DMA介紹(精)
查看>>
S3C2410:DMA介紹(精)
查看>>
S3C2410 Linux IIS音频设备驱动分…
查看>>
S3C2410 Linux IIS音频设备驱动分…
查看>>
s3c2410的dma操作的一般步骤
查看>>
s3c2410的dma操作的一般步骤
查看>>
s3c2440 spi驱动DMA模式
查看>>
s3c2440 spi驱动DMA模式
查看>>
编写的dm9000ep驱动(2.6.13)
查看>>
编写的dm9000ep驱动(2.6.13)
查看>>
DM9000 驱动移植及源码简析
查看>>
DM9000 驱动移植及源码简析
查看>>
创建字符设备的三种方法 (转载)
查看>>
Linux下ARM汇编教程
查看>>
Linux下ARM汇编教程
查看>>
linux面试题参考答案
查看>>
LINUX驱动之IIC子系统之三I2C的数…
查看>>