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用来显示歌曲的信息

关于布局
  1. 设计界面时需要用到一些图标,可以将按钮的背景设为矢量图。
    图标可以在阿里巴巴矢量图下载
  2. 主界面采用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对象都能保存下来。