日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android 收藏歌曲功能,基于android的网络音乐播放器-回调实现音乐播放及音乐收藏的实现(三)...

發布時間:2024/3/26 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 收藏歌曲功能,基于android的网络音乐播放器-回调实现音乐播放及音乐收藏的实现(三)... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

作為android初學者,最近把瘋狂android講義和瘋狂Java講義看了一遍,看到書中介紹的知識點非常多,很難全部記住,為了更好的掌握基礎知識點,我將開發一個網絡音樂播放器-EasyMusic來鞏固下,也當作是練練手。感興趣的朋友可以看看,有設計不足的地方也歡迎指出。

開發之前首先介紹下該音樂播放器將要開發的功能(需求):

1.本地音樂的加載和播放;

2.網絡音樂的搜索,試聽和下載;

3.音樂的斷點下載;

4.點擊播放圖標加載專輯圖片,點擊歌詞加載歌詞并滾動顯示(支持滑動歌詞改變音樂播放進度);

5.支持基于popupWindow的彈出式菜單;

6.支持后臺任務欄顯示和控制。

該篇主要介紹音樂的回調播放及收藏音樂的實現,其中音樂的收藏需要用到SQLite數據庫:

1.回調監聽實現音樂的點擊播放

該部分對MusicListFragment 的主要修改如下

public class MusicListFragment extends Fragment {

......

private CallBack mCallBack;

.....

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

View view = inflater.inflate(R.layout.musiclist, container, false);

musicListView = (ListView)view.findViewById(R.id.musicList);

musicListView.setAdapter(musicListAdapter);

musicListView.setOnItemClickListener(new OnItemClickListener() {

public void onItemClick(AdapterView> parent, View view, int position, long id) {

//mCallBack指向MainActivity,實際調用的是MainActivity的onItemSelected方法

mCallBack.onItemSelected((String)dbMusic.get(position).get("url"));

TextView title = (TextView)view.findViewWithTag("title");

Toast.makeText(mContext, "title = " + title.getText().toString(), Toast.LENGTH_SHORT).show();

}

});

return view;

}

/**

* 回調接口指向MainActivity,因為MainActivity實現了CallBack接口,所有這里用到了多態-父類引用指向子類對象,然后在該Fragment中可

* 通過mCallBack調用MainActivity播放音樂的方法

*/

public void onAttach(Activity activity) {

super.onAttach(activity);

mCallBack = (CallBack)activity;

}

public interface CallBack {

public void onItemSelected(String url);

}

}

MainActivity還需要實現MusicListFragment的內部接口CallBack,這樣當點擊音樂列表時即可調用MainActivity的onItemSelected方法,實現音樂的播放,MainActivity的調整如下:

public class MainActivity extends FragmentActivity implements MusicListFragment.CallBack, View.OnClickListener {

......

@Override

public void onItemSelected(String url) {

playMusic(url);

}

}

2.音樂收藏的實現

這里設計的收藏思路為:點擊音樂后端的五角星實現五角星的點亮和熄滅,分別對應收藏和取消收藏,收藏任務的執行使用異步任務,異步任務定義為MusicListFragment的內部類,其定義如下:

//執行收藏音樂/取消收藏的異步任務

private class MyAsyncTask extends AsyncTask{

private ImageView starView;

private MapmusicInfo;

private boolean storeSuccess;

public MyAsyncTask(ImageView starView, MapmusicInfo) {

this.starView = starView;

this.musicInfo = musicInfo;

}

protected void onPreExecute() {

super.onPreExecute();

}

protected void onProgressUpdate(Void... values) {

super.onProgressUpdate(values);

}

protected Void doInBackground(String... params) {

Log.d(TAG, "doInBackground");

Cursor cursor = myHelper.getReadableDatabase().rawQuery("select * from stored_music", null);

while (cursor.moveToNext()) {

String title = cursor.getString(1);

String artist = cursor.getString(2);

Log.d(TAG, "title = " + title + " artist = " + artist);

Log.d(TAG, "musicInfo.title = "+(String)musicInfo.get("title")+ " musicInfo.artist = "+(String)musicInfo.get("artist"));

if (title.equals((String)musicInfo.get("title")) && artist.equals((String)musicInfo.get("artist"))) {

//已經收藏的音樂取消收藏并移出收藏音樂表格-stored_music

myHelper.getReadableDatabase().execSQL("delete from stored_Music where title like ? and artist like ?",

new String[] {title, artist});

storeSuccess = false;

return null;

}

}

//未收藏的音樂加入到收藏中

myHelper.getReadableDatabase().execSQL("insert into stored_music values(null, ?, ?, ?, ?)",

new Object[] {musicInfo.get("title"),musicInfo.get("artist"),musicInfo.get("duration"),musicInfo.get("url")});

storeSuccess = true;

return null;

}

protected void onPostExecute(Void result) {

super.onPostExecute(result);

if (storeSuccess) {

starView.setImageResource(android.R.drawable.btn_star_big_on);

Toast.makeText(mContext, "收藏成功", 100).show();

} else {

starView.setImageResource(android.R.drawable.btn_star_big_off);

Toast.makeText(mContext, "取消收藏", 100).show();

}

}

當點擊音樂的收藏圖標-五角星時即可開啟一個異步任務,當異步任務執行即為相應的收藏數據庫音樂信息的增加和刪除,執行完成完成后再點亮/熄滅五角星。另外,我們音樂收藏數據庫的定義如下:

package com.sprd.easymusic.mysql;

import android.content.Context;

import android.database.sqlite.SQLiteDatabase;

import android.database.sqlite.SQLiteDatabase.CursorFactory;

import android.database.sqlite.SQLiteOpenHelper;

public class MyDBHelper extends SQLiteOpenHelper {

//收藏音樂的數據表

private final String CREATE_TABLE_LOCALMUSIC = "create table stored_music(" +

"_id integer primary key autoincrement,title,artist,duration,url)";

public MyDBHelper(Context context, String name, CursorFactory factory, int version) {

super(context, name, factory, version);

}

@Override

public void onCreate(SQLiteDatabase db) {

db.execSQL(CREATE_TABLE_LOCALMUSIC);

}

@Override

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

// TODO Auto-generated method stub

}

}

異步任務的啟動源于收藏圖標的監聽:

// 音樂列表適配器

private BaseAdapter musicListAdapter = new BaseAdapter() {

@Override

public int getCount() {

return dbMusic.size();

}

@Override

public Object getItem(int position) {

return null;

}

@Override

public long getItemId(int position) {

return position;

}

@Override

public View getView(final int position, View convertView, ViewGroup parent) {

View view = convertView;

Mapitem = dbMusic.get(position);

if (convertView == null) {

view = inflater.inflate(R.layout.musiclist_item, null);

}

final ImageView storeMusic = (ImageView) view.findViewById(R.id.love);

if (checkIfStored((String) item.get("url"))) {

storeMusic.setImageResource(android.R.drawable.btn_star_big_on);

} else {

storeMusic.setImageResource(android.R.drawable.btn_star_big_off);

}

//收藏或取消收藏的監聽

storeMusic.setOnClickListener(new OnClickListener() {

public void onClick(View v) {

new MyAsyncTask(storeMusic, dbMusic.get(position)).execute();

}

});

TextView musicTitle = (TextView) view.findViewById(R.id.musicTitle);

musicTitle.setTag("title");

TextView musicArtist = (TextView) view.findViewById(R.id.musicArtist);

musicTitle.setText((String) item.get("title"));

musicArtist.setText((String) item.get("artist"));

return view;

}

};

音樂收藏的關鍵代碼就如上面所述,其他就不多講了。當然在進入音樂列表的時候需要查詢當前音樂是否被收藏了,是的話就需要點亮收藏圖標,加上一個判斷即可,上面代碼中的checkIfStored((String) item.get(“url”))方法就是進行該判斷的。

好了,該篇先講這么多了,后面一篇我將把這些主要類的代碼都貼上并附上效果圖供大家參考。

音樂播放器已完成,下載地址:

Android音樂播放器

總結

以上是生活随笔為你收集整理的android 收藏歌曲功能,基于android的网络音乐播放器-回调实现音乐播放及音乐收藏的实现(三)...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。