首页 > 编程知识 正文

怎么让listview点击后播放音乐,listview获取音乐文件夹

时间:2023-05-04 13:53:16 阅读:219016 作者:76

     最近做了个Mp3播放器,可以实现基本的核心功能如播放,暂停,上一曲,下一曲,播放音乐时发送通知,因为本人技术不是很好做的东西只能算得上Dome级的,还有很多不足之处,还望大家指出,促使自己不断长进。。。。。首先,我们要把手机sdcard里的音乐要遍历查找出来,显示在界面上,就需要用到listview,自定义适配器。本人就选了个自己喜欢的音乐播放器来模仿,效果如下:

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.mp3String 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();}@Overridepublic Object getItem(int position) {// 返回容器中指定位子的数据项return mList.get(position);}@Overridepublic long getItemId(int position) {// 返回容器中指定位置的IDmCountTextView.setText("(" + (position + 1) + "/" + mList.size()+ ")");return position;}@Overridepublic 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 自带的遍历音乐文件的方法,获取信息比较全面,我就放在下篇博客。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。