mp3播放器 遍历本地音乐显示在listview上,点击每一项item并传送音乐地址
2015-08-03 13:41
666 查看
最近做了个Mp3播放器,可以实现基本的核心功能如播放,暂停,上一曲,下一曲,播放音乐时发送通知,因为本人技术不是很好做的东西只能算得上Dome级的,还有很多不足之处,还望大家指出,促使自己不断长进。。。。。首先,我们要把手机sdcard里的音乐要遍历查找出来,显示在界面上,就需要用到listview,自定义适配器。本人就选了个自己喜欢的音乐播放器来模仿,效果如下:
对sdcard里的所有文件进行遍历,以mp3或m4a结束的文件名就是音乐文件,这个方法比较简单,但是获取的音乐信息不全面,如音乐文件大小,音乐播放时长等等,后面有朋友推荐了一种android 自带的遍历音乐文件的方法,获取信息比较全面,我就放在下篇博客。
package com.example.duomimusicplayer; import java.io.File; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.os.Environment; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.view.Window; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.BaseAdapter; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; public class PlayerListActivity extends Activity implements OnItemClickListener { private ListView mListView; private ArrayList filelist = new ArrayList(); private TextView mCountTextView; private ImageButton mBackImageButton; private File itemfile; private File rootfile; private FileListViewAdapter adapters = new FileListViewAdapter(this); private ArrayList<MusicFileBean> mMusicBeanList = new ArrayList<MusicFileBean>();// 装音乐列表的数组 private ArrayList<File> mFileList = new ArrayList<File>(); private File musicfile = Environment.getExternalStorageDirectory(); protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.playerlist_layout); mBackImageButton = (ImageButton) findViewById(R.id.list_back_imager); mCountTextView = (TextView) findViewById(R.id.playlist_count); mListView = (ListView) findViewById(R.id.playlist_listview); mListView.setOnItemClickListener(this); seacrhMusicFile(musicfile); mListView.setAdapter(adapters); adapters.setAdapterData(filelist); mBackImageButton.setOnClickListener(new OnClickListener() { public void onClick(View v) { startActivity(new Intent(PlayerListActivity.this, MusicServiceActivity.class)); } }); } /* * */ public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Intent intent = new Intent(PlayerListActivity.this, MusicServiceActivity.class); intent.putParcelableArrayListExtra("MUSICFILE_LIST", mMusicBeanList);// 传地址 intent.putExtra("CURRENT_POSTION", position); startActivity(intent); // finish(); } /** * 遍历搜索音乐文件 */ public void seacrhMusicFile(File rootsFile) { // File musicfile = Environment // .getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC); // // if (musicfile != null) { // File[] files = musicfile.listFiles();// 列出当前目录下的所有文件 // filelist = new ArrayList(); // for (File file : files) { // filelist.add(file); // // 构造音乐播放列表,遍历所有音乐后把所有音乐放在一个集合里 // MusicFileBean music = new MusicFileBean(); // music.setMusicName(file.getName()); // music.setMusicPath(file.getPath()); // // String musicName = music.getMusicName();// 如xx.mp3 // String musicNamefg = musicName.substring(0, // musicName.length() - 4);// 对mp3格式文件名进行分割,从0位开始,到“.”分隔开 // music.setMusicName(musicNamefg); // mMusicBeanList.add(music); // } // adapters.setAdapterData(filelist); // // } else { // Toast.makeText(this, "音乐文件为空!", Toast.LENGTH_SHORT).show(); // // } // mListView.setAdapter(adapters); // File[] files = musicfile.listFiles();// 列出当前目录下的所有文件 // filelist = new ArrayList(); // for (File file : files) { // filelist.add(file); File[] files = rootsFile.listFiles();// 列出当前目录下的所有文件 if (files.length > 0) { for (File file : files) { if (file.isDirectory()) { seacrhMusicFile(file);//递归调用 } else { String name = file.getName(); if (name.endsWith(".m4a")||name.endsWith(".mp3")) { filelist.add(file); //下面这几行代码是为了后面传递音乐路径而整理的音乐集合,如果只需要把本地音乐显示在listview列表上的话,就不需要下面的代码 // 构造音乐播放列表,遍历所有音乐后把所有音乐放在一个集合里 MusicFileBean music = new MusicFileBean(); music.setMusicName(file.getName()); music.setMusicPath(file.getPath()); String musicName = music.getMusicName();// 如xx.mp3 String musicNamefg = musicName.substring(0, musicName.length() - 4);// 对mp3格式文件名进行分割,从0位开始,到“.”分隔开 music.setMusicName(musicNamefg); mMusicBeanList.add(music); } } } } } /* * 自定义FileListViewAdapter适配器 */ public class FileListViewAdapter extends BaseAdapter { private Context mContext; private List mList = new ArrayList(); public FileListViewAdapter(Context context) { mContext = context; } public void setAdapterData(ArrayList<File> list) { this.mList = list; notifyDataSetChanged(); } public int getCount() {// 返回容器中的元素个数(返回listview的长度) return mList.size(); } @Override public Object getItem(int position) {// 返回容器中指定位子的数据项 return mList.get(position); } @Override public long getItemId(int position) {// 返回容器中指定位置的ID mCountTextView.setText("(" + (position + 1) + "/" + mList.size() + ")"); return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { View v = null; ViewHolder viewHolder; if (convertView == null) { v = LayoutInflater.from(mContext).inflate( R.layout.playlist_item, null); viewHolder = new ViewHolder(); viewHolder.iconImage = (ImageView) v .findViewById(R.id.playlist_icon); viewHolder.contexttxt = (TextView) v .findViewById(R.id.playlist_textview); v.setTag(viewHolder); } else { v = convertView; viewHolder = (ViewHolder) v.getTag(); } File file = (File) getItem(position); viewHolder.contexttxt.setText(file.getName()); return v; } public class ViewHolder { ImageView iconImage; TextView contexttxt; } } }
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#1a1a1a" android:orientation="vertical" > <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#1a1a1a" android:paddingLeft="10dp" > <ImageButton android:id="@+id/list_back_imager" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#1a1a1a" android:paddingLeft="10dp" android:src="@drawable/icon_back_white" /> <TextView android:id="@+id/list_textview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="本地音乐" android:textColor="#ffffff" android:textSize="20sp" /> <TextView android:id="@+id/playlist_count" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@+id/list_textview" android:gravity="center" android:textColor="#ffffff" android:textSize="20sp" /> </RelativeLayout> <ListView android:id="@+id/playlist_listview" android:layout_width="match_parent" android:layout_height="wrap_content" > </ListView> </LinearLayout>
对sdcard里的所有文件进行遍历,以mp3或m4a结束的文件名就是音乐文件,这个方法比较简单,但是获取的音乐信息不全面,如音乐文件大小,音乐播放时长等等,后面有朋友推荐了一种android 自带的遍历音乐文件的方法,获取信息比较全面,我就放在下篇博客。
相关文章推荐
- 读取配置文件
- 微信开发总结 五
- mysql : Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf16_general_ci,IMPLICIT) for operation '
- 网页在地址栏和收藏夹中图标显示效果
- 详解SHOW PROCESSLIST显示哪些线程正在运行列出的状态
- 如何手动解析CrashLog
- [深入理解Android卷二 全文-第四章]深入理解PackageManagerService
- add_header X-Frame-Options "SAMEORIGIN";NGINX
- AudioManager的简单使用
- MD5加密
- 微信开发总结 四
- IIFE (Imdiately Invoked Function Expression 立即执行的函数表达式)。
- spring和mybatis整合进行事务管理
- Android开发问题集合
- leetcode 66: Plus One
- Bus System
- Scikit-Learn:开源的机器学习Python模块
- poj 3041 构图+最小点覆盖
- maven 在 mac中的配置
- Linux下快速安装Mysql及使用