Android大作业——音乐播放器

1、团队成员:

计算机161班  1600802010 韩   璐   博客地址:https://www.cnblogs.com/hanlulu/

计算机161班 1600802036 朱永霞   博客地址:https://www.cnblogs.com/zyxboke/

2、APK 链接:

https://git.dev.tencent.com/Air_Amy/FinalHomework.git

3、作业代码链接:

https://git.dev.tencent.com/Air_Amy/FinalHomework.git

4、介绍团队项目
4、1 团队项目的总体效果截图

 视频:

 

 

 

4、2 实现的功能及其效果的描述

实现功能:

4.2.1、上一曲、下一曲、播放、暂停

4.2.2、进步条

4.2.3、清除最近听得列表歌曲

4.2.4、播放列表

4.2.5、显示歌曲信息

5、项目关键代码

5.1、上一曲、下一曲、播放、暂停

 

public  void onClick(View v){
switch (v.getId()) {
case R.id.play:
musicService.start();
break;
case R.id.localmusic:
Intent intent = new Intent(MainActivity.this,LocalMusicActivity.class);
startActivity(intent);
break;
case R.id.playlist:
Intent intent3 = new Intent(MainActivity.this,playlist.class);
startActivity(intent3);
break;
case R.id.playnext:
SQLiteDatabase db = dbHelper.getWritableDatabase();
Cursor cursor = db.query("login",null,null,null,null,null,null);
cursor.moveToFirst();
do{
Log.e("music","CurrentTitle = "+CurrentTitle); //播放列表不会有同名歌曲,所以根据标题对比
if(CurrentTitle.equals(cursor.getString(cursor.getColumnIndex("title")))) {
Log.e("music","找到匹配");
cursor.moveToNext();
if(cursor.isAfterLast()) {
Log.e("music","当前歌曲在最后一行返回第一行");
cursor.moveToFirst();
String url = cursor.getString(cursor.getColumnIndex("url"));
String title = cursor.getString(cursor.getColumnIndex("title"));
String artist = cursor.getString(cursor.getColumnIndex("artist"));
Intent intent2 = new Intent("startnew");
intent2.putExtra("url",url);
intent2.putExtra("title",title);
intent2.putExtra("artist",artist);
final Intent eiiintent = new Intent(createExplicitFromImplicitIntent(MainActivity.this,intent2));
bindService(eiiintent,conn, Service.BIND_AUTO_CREATE);
startService(eiiintent);
break;
} else{
Log.e("music","当前歌曲不是在最后一行");
String url = cursor.getString(cursor.getColumnIndex("url"));
String title = cursor.getString(cursor.getColumnIndex("title"));
String artist = cursor.getString(cursor.getColumnIndex("artist"));
cursor.moveToLast();
Intent intent2 = new Intent("startnew");
intent2.putExtra("url",url);
intent2.putExtra("title",title);
intent2.putExtra("artist",artist);
final Intent eiintent = new Intent(createExplicitFromImplicitIntent(MainActivity.this,intent2));
bindService(eiintent,conn, Service.BIND_AUTO_CREATE);
startService(eiintent);
break;
}
}
}while(cursor.moveToNext());
cursor.close();
break;
case R.id.playlast:
SQLiteDatabase dbb = dbHelper.getWritableDatabase();
Cursor cursorr = dbb.query("login",null,null,null,null,null,null);
cursorr.moveToFirst();
do{
if(CurrentTitle.equals(cursorr.getString(cursorr.getColumnIndex("title")))) {

cursorr.moveToPrevious();
if(cursorr.isBeforeFirst()){
cursorr.moveToLast();
String url = cursorr.getString(cursorr.getColumnIndex("url"));
String title = cursorr.getString(cursorr.getColumnIndex("title"));
String artist = cursorr.getString(cursorr.getColumnIndex("artist"));
Intent intent8 = new Intent("startnew");
intent8.putExtra("url",url);
intent8.putExtra("title",title);
intent8.putExtra("artist",artist);
final Intent eeiintent = new Intent(createExplicitFromImplicitIntent(MainActivity.this,intent8));
bindService(eeiintent,conn, Service.BIND_AUTO_CREATE);
startService(eeiintent);
break;
}
else{
String url = cursorr.getString(cursorr.getColumnIndex("url"));
String title = cursorr.getString(cursorr.getColumnIndex("title"));
String artist = cursorr.getString(cursorr.getColumnIndex("artist"));
cursorr.moveToNext();
Intent intent8 = new Intent("startnew");
intent8.putExtra("url",url);
intent8.putExtra("title",title);
intent8.putExtra("artist",artist);
final Intent eeiintent = new Intent(createExplicitFromImplicitIntent(MainActivity.this,intent8));
bindService(eeiintent,conn, Service.BIND_AUTO_CREATE);
startService(eeiintent);
break;
}

}
}while(cursorr.moveToNext());
cursorr.close();
break;
default:
break;
}}

 

5.2、获得歌曲信息

public class Music {
private int id;
private long album_id;
private String title;
private String artist;
private long duration;
private String url;

public void setId(int id){
this.id = id;
}
public long getId(){return this.id;}
public void setTitle(String title){
this.title = title;
}
public String getTitle(){return this.title;}
public void setArtist(String artist){
this.artist = artist;
}
public String getArtist(){return this.artist;}
public void setDuration(long duration){this.duration = duration;}
public long getDuration(){return this.duration;}
public void setUrl(String url){this.url = url;}
public String getUrl(){return this.url;}
public void setAlbum_id(long album_id){this.album_id = album_id;}
public long getAlbum_id(){return this.album_id;}














public class Findmusic {
public List<Music> getmusics(ContentResolver contentResolver) {
Cursor cursor = contentResolver.query(
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, MediaStore.Audio.Media.DEFAULT_SORT_ORDER);
List<Music> musics = new ArrayList<Music>();
for (int i = 0; i < cursor.getCount(); i++) {
Music music = new Music();
cursor.moveToNext();
String title = cursor.getString((cursor.getColumnIndex(MediaStore.Audio.Media.TITLE)));
String artist = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST));
long duration = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.DURATION));
String url = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));
String album = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM));
long album_id = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID));
int isMusic = cursor.getInt(cursor.getColumnIndex(MediaStore.Audio.Media.IS_MUSIC));
if (isMusic != 0 && duration/(1000 * 60) >= 1) {//筛选歌曲
music.setTitle(title);
music.setArtist(artist);
music.setDuration(duration);
music.setUrl(url);
musics.add(music);
}
}
cursor.close();
return musics;
}

}

 5.3返回键退出

 

    public boolean onTouchEvent(MotionEvent event) {
        mGestureDetector.onTouchEvent(event);
        return super.onTouchEvent(event);
    }

 

 

 

 5.4主页面布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:background="@drawable/bg1"
    tools:context="com.example.administrator.musicplayer.MainActivity"
    android:orientation="vertical">

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/top"
        android:layout_alignParentStart="true"
        android:layout_weight="3">

        <Button
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:id="@+id/localmusic"
            android:background="@drawable/localmusic"
            android:layout_gravity="right|top" />

    </FrameLayout>

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="10">

        <Button
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:id="@+id/playnext"
            android:background="@drawable/playnextbg"
            android:layout_alignParentTop="true"
            android:layout_alignParentEnd="true"
            android:layout_gravity="right|center_vertical"
            android:layout_marginRight="40dp" />

        <Button
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:id="@+id/play"
            android:background="@drawable/buttonbg"
            android:layout_gravity="center"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:layout_marginLeft="5dp" />

        <Button
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:id="@+id/playlast"
            android:background="@drawable/playpreviousbg"
            android:layout_alignParentTop="true"
            android:layout_alignParentStart="true"
            android:layout_gravity="left|center_vertical"
            android:layout_marginLeft="40dp" />

    </FrameLayout>
    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="10"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true"
        android:id="@+id/bottom">


        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="left|center_vertical"
            android:orientation="vertical">


            <LinearLayout
                android:orientation="horizontal"
                android:layout_width="match_parent"
                android:layout_weight="1"
                android:layout_height="match_parent">

                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:gravity="top"
                    android:hint="Title"
                    android:id="@+id/textView"
                    android:layout_gravity="center"
                    android:textColor="#ffffff"
                    android:textSize="20dp"
                    android:textColorHint="#ffffff" />

                <Button
                    android:layout_width="30dp"
                    android:layout_height="30dp"
                    android:background="@drawable/playlist"
                    android:id="@+id/playlist"
                    android:layout_gravity="top" />
            </LinearLayout>

            <SeekBar
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_weight="2"
                android:id="@+id/seekBar"
                android:maxHeight="1dp"
                android:maxWidth="1dp"
                android:progressDrawable="@drawable/seekbarbg"
                android:thumb="@drawable/currentprogress3"
                android:indeterminate="false"
                android:layout_gravity="center_horizontal|bottom" />


            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:hint="artist"
                android:textAppearance="?android:attr/textAppearanceLarge"
                android:id="@+id/textView2"
                android:textColor="#ffffff"
                android:textColorHint="#ffffff"
                android:textSize="15dp" />

        </LinearLayout>


    </FrameLayout>

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_weight="10"
        android:layout_height="match_parent"></FrameLayout>

</LinearLayout>

 

 

 

6、前五(并列排序,先后顺序按照我下载APK的顺序排列)

 

6.1 汤文涛组的校园易

 

描述:实现的功能有登录、注册、密码修改、查看个人信息、上传商品、查看我的发布、查看所有商品、查看某个商品的详细信息、给商家留言

 

优点:界面优美,App贴近生活,登录注册页面让人舒适,感觉商品分类很清楚,价格明确,可以自行发布信息,对信息进行查插删改更新等,还有给商家留言互动的功能,让我大吃一惊。个人信息修改也很到位。个人发布信息的管理很清晰。

 

缺点:分类中有Bug,留言添加不了

 

我所提倡:我发布的添加到页面,填写信息增加格式限制。

 

 

6.2 孟凡锚组音乐播放器

 

描述:孟凡锚组音乐播放器实现了音乐播放器的基本功能,特别是音量调节。

 

优点:界面美观,上部分的图片播放很让人惊叹,音量调节这部分我十分喜欢,相对于我们写的音乐播放器来说,高大上了不少,上面的音乐图片循环很是美观,基本上和我使用的播放器达到了一致的效果,音乐信息的获取也很不错。

 

缺点:播放暂停偶尔状态切换不到位,音量调节按钮有点小。

 

我所提倡:增加列表键,不将音乐列表直接袒露在主页面。

6.3  贺鸿坤组音乐播放器

 

描述:贺鸿坤组音乐播放器实现了音乐播放器的基本功能。

 

优点:界面堪称我看到的音乐播放器中最美观的了,实在是梦幻。而且歌曲界面播放的美观大方,功能方面,上一曲下一曲切换自如。基本的播放器功能都实现了,而且个人认为在添加几个功能就和市面上的音乐播放器一样了

 

缺点:没有实现音量调节

 

我所提倡:实现音量调节。

 

6.4  李凌龙组简易账本

 

描述:李凌龙组简易账本实现了账本的基本功能,记账时间选择,金额,记账记录的插入删改。

 

优点:界面简洁大方,给予一种视觉的舒适感,记账时间的选择方便记录忘记记录的账目,日历式的选择让人耳目一新,优于自己的时间填入。账本最令我开心的是编辑功能,可以对写错的账目进行再次修改。

 

缺点:时间无法选择具体,时分不能进行选择。

 

我所提倡:建议账目背景可以添加一下,使得界面跟家美观,字体有点小。可以更改填入内容为选项,常规项目,例如吃饭购物就可以选择而不用自己填入。

 

6.5  洪居兴组旅游攻略

 

描述:洪居兴组旅游攻略本实现了旅游攻略的基本功能,登录注册,验证码验证,查看攻略等。

 

优点:界面十分美观,验证码功能是最惊艳,手机验证码验证功能是我不会的,希望以后讨教。APP贴近现实,很有用处。服务协议也很赞。

 

缺点:密码未加密,同意服务协议那的框框看不清在哪

 

我所提倡:联网搜索酒店等功能服务。

 

7、问题及解决方法

7.1、上一曲到第一曲时如何跳到最后一曲————1600802010韩璐

解决办法:

上一曲到第一曲时,获取文件总个数,另其播放位置变成最后一曲,从最后一曲播放

7.2、下一曲到最后一曲时如何跳到第一曲————160802010韩璐

解决办法:

下一曲到最后一曲时,获取文件总个数,另其播放位置变成第一首,及0,从第一首播放。

7.3、如何实现几个播放模式改变。————1600802010韩璐

解决办法:

给他们指定为1,2,3.不同情况下转换。

单曲循环,另播放位置始终为当前歌曲。

全部循环,另其结束在开始。

随机播放,随机获取播放位置,开始播放。

7.4、如何获取信息————1600802036朱永霞

解决办法:

创建一个歌曲类,定义变量,这些变量用来储存需要获取的内容

定义一个工具类,在这个类中获取音频文件,并且对歌曲名、歌手和时间等进行格式规范

7.5、如何存储歌曲————1600802036朱永霞

解决办法:

定义一个布局用于展示每一个音频文件的内容,并把这个布局添加到主布局文件中的ListView中去.

读取手机中所有的音频文件,然后将文件信息显示在listView中。

8、团队分工

姓名 分工 工作比例 分数
韩璐 上一曲下一曲、列表清除 50% 10
朱永霞 界面实现,播放列表实现 50% 10

posted on 2018-12-27 18:38  qhu韩璐  阅读(2079)  评论(0编辑  收藏  举报