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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM