Android 音乐播放器设计
- 自动打入本地音乐文件
- 支持切歌功能
- 返回后继续播放
- 代码注释详细
- 借助日志工具方便调试
- Android 音乐播放器设计
- UI设计
- 功能需求
- 设计想法
- 关于布局
- 关于活动
- 代码
UI设计
- 主界面
- 播放界面
功能需求
- 主界面需要显示歌曲的名字、艺术家、歌曲长度
- 播放界面需要有播放、暂停、切到前一首歌、切到后一首歌、返回、分享、歌曲名、歌手
- 播放界面的播放和暂停按钮设置在同一个地方,放歌时显示暂停按钮,暂停时显示播放按钮
- 从播放界面返回主界面时需要继续播放歌曲
- 在主界面点击一首歌后,就立即开始播放
设计想法
activity文件:
- MainActivity.java : 主界面,用于显示歌曲列表
- MusicActivity.java : 播放界面,显示歌曲的具体信息,实现切歌、暂停等功能
class文件:
- GetSongs.java : 获取手机内存及SD卡中所有的歌曲
- Song.java : 歌曲的实体类,储存歌曲信息
- SongAdapter : 自定义的适配器,继承自ArrayAdpter,泛型指定为Song类,完成ListView控件的实现
layout文件:
- activity_main.xml : 主界面的layout设计
- activity_music.xml : 播放界面的layout设计
- song_item.xml : 此布局包括了一个Imageview用来显示歌曲图片,三个TextView用来显示歌曲的信息
关于布局
- 设计界面时需要用到一些图标,可以将按钮的背景设为矢量图。
图标可以在阿里巴巴矢量图下载 - 主界面采用ListView控件,定制ListView的界面。
具体步骤:
- 在activity_main.xml添加ListView控件
- 定义一个实体类Song
- 创建一个布局song_item.xml,用于ListView子项的显示
布局形式:
采用线性布局和相对布局嵌套使用
关于活动
1、 如果实现MainActivity与MusicActivity的数据交流:
在MainActivity中发送:
``` java
//调用MusicActivity
Intent intent = new Intent(MainActivity.this,MusicActivity.class);
intent.putExtra("Song_position",new Gson().toJson(position));//传递这首歌的位置
intent.putExtra("Song",new Gson().toJson(songSelected));//传递这首歌的具体信息
intent.putExtra("Song_list",new Gson().toJson(songList));//传递整个歌曲列表
//启动活动
startActivity(intent);
```
在MusicActivity中接收:
Intent intent = getIntent();
String JsonData = intent.getStringExtra("Song");
songSelected = new Gson().fromJson(JsonData, Song.class); //接收选中的歌曲信息
String JsonData2 = intent.getStringExtra("Song_position");
songPosition = new Gson().fromJson(JsonData2, int.class); //接收选中的歌曲在列表中的位置
String JsonData3 = intent.getStringExtra("Song_list");
songList = new Gson().fromJson(JsonData3, new TypeToken<List<Song>>(){}.getType()); //接收整个歌曲列表
2、 如何实现从MusicActivity返回后继续播放:
方法一:
将MusicActivity的启动模式设置为singleInstance:
这样MusicActivity将单独存在于一个返回栈中,在与MainActivity相互转换的时候,MusicActivity活动仍然存在不会被摧毁。
设置方法是在AndroiManifest.xml中对MusicActivity设置为:
<activity android:name=".Music_Activity"
android:launchMode="singleInstance">
<intent-filter>
<action android:name=".ACTION_START"/>
<action android:name="android.intent.category.DEFAULT"/>
<action android:name=".MY_CATEGORY"/>
</intent-filter>
</activity>
方法二:
将在MusicActivity中接收的数据定义成静态变量,这样即使MusicActivity活动被摧毁,建立的MediaPlayer对象以及Song对象都能保存下来。