Android中从SD卡中读取歌曲

先看看我的效果图吧

Activity类

  1         private TextView nameTextView;
  2     private SeekBar seekBar;
  3     private ListView listView;
  4     private List<Map<String, String>> data;
  5     private int current;
  6     private MediaPlayer player;
  7     private Handler handler = new Handler();
  8     private Button ppButton;
  9     private boolean isPause;
 10     private boolean isStartTrackingTouch;
 11         protected void onCreate(Bundle savedInstanceState) {
 12         super.onCreate(savedInstanceState);
 13         setContentView(R.layout.mainb);
 14                 ib3=(ImageButton) findViewById(R.id.ib3);
 15         ib3.setOnClickListener(new OnClickListener() {
 16             @Override
 17             public void onClick(View v) {
 18                 Intent it=new Intent(Music_b.this,Music_gc.class);
 19                 String name=data.get(current).get("name");
 20                 it.putExtra("name", name);
 21                 startActivityForResult(it, 1);
 22             }
 23         });
 24         tv=(TextView)findViewById(R.id.tvbb);
 25         sp=(Spinner) findViewById(R.id.sp);
 26         sp.setOnItemSelectedListener(new OnItemSelectedListener() {
 27             @Override
 28             public void onItemSelected(AdapterView<?> arg0, View view,
 29                     int arg2, long arg3) {
 30                 TextView tv1=(TextView)view;
 31                 String str=tv1.getText().toString();
 32                 tv.setText(str);
 33             }
 34             @Override
 35             public void onNothingSelected(AdapterView<?> arg0) {
 36             }
 37         });
 38         sp1=(Spinner) findViewById(R.id.sp1);
 39         sp1.setOnItemSelectedListener(new OnItemSelectedListener() {
 40
 41             @Override
 42             public void onItemSelected(AdapterView<?> arg0, View view,
 43                     int arg2, long arg3) {
 44                 TextView tv1=(TextView)view;
 45                 String str=tv1.getText().toString();
 46                 tv.setText(str);
 47             }
 48             @Override
 49             public void onNothingSelected(AdapterView<?> arg0) {
 50
 51             }
 52         });
 53             nameTextView = (TextView) findViewById(R.id.name);
 54         seekBar = (SeekBar) findViewById(R.id.seekBar);
 55         listView = (ListView) findViewById(R.id.list);
 56         ppButton = (Button) findViewById(R.id.pp);
 57         //创建一个音乐播放器
 58         player = new MediaPlayer();
 59         //显示音乐播放器
 60         generateListView();
 61         //进度条监听器
 62         seekBar.setOnSeekBarChangeListener(new MySeekBarListener());
 63         //播放器监听器
 64         player.setOnCompletionListener(new MyPlayerListener());
 65         //意图过滤器
 66         IntentFilter filter = new IntentFilter();
 67     }
 68     private final class MyPlayerListener implements OnCompletionListener {
 69         //歌曲播放完后自动播放下一首歌区
 70         public void onCompletion(MediaPlayer mp) {
 71             next();
 72         }
 73     }
 74     public void next(View view) {
 75         next();
 76     }
 77     public void previous(View view) {
 78         previous();
 79     }
 80     private void previous() {
 81         current = current - 1 < 0 ? data.size() - 1 : current - 1;
 82         play();
 83     }
 84     private void next() {
 85         current = (current + 1) % data.size();
 86         play();
 87     }
 88     private final class MySeekBarListener implements OnSeekBarChangeListener {
 89         //移动触发
 90         public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
 91         }
 92         //起始触发
 93         public void onStartTrackingTouch(SeekBar seekBar) {
 94             isStartTrackingTouch = true;
 95         }
 96         //结束触发
 97         public void onStopTrackingTouch(SeekBar seekBar) {
 98             player.seekTo(seekBar.getProgress());
 99             isStartTrackingTouch = false;
100         }
101     }
102     private void generateListView() {
103         List<File> list = new ArrayList<File>();
104         //获取sdcard中的所有歌曲
105         findAll(Environment.getExternalStorageDirectory(), list);
106         //播放列表进行排序,字符顺序
107         Collections.sort(list);
108         data = new ArrayList<Map<String, String>>();
109         for (File file : list) {
110             Map<String, String> map = new HashMap<String, String>();
111             map.put("name", file.getName());
112             map.put("path", file.getAbsolutePath());
113             data.add(map);
114         }
115         SimpleAdapter adapter = new SimpleAdapter(this, data, R.layout.mainmp3_item, new String[] { "name" }, new int[] { R.id.mName });
116         listView.setAdapter(adapter);
117         listView.setOnItemClickListener(new MyItemListener());
118     }
119     private final class MyItemListener implements OnItemClickListener {
120         public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
121             current = position;
122             play();
123         }
124     }
125     private void play() {
126         try {
127             //重播
128             player.reset();
129             //获取歌曲路径
130             player.setDataSource(data.get(current).get("path"));
131             //缓冲
132             player.prepare();
133             //开始播放
134             player.start();
135             //显示歌名
136             nameTextView.setText(data.get(current).get("name"));
137             //设置进度条长度
138             seekBar.setMax(player.getDuration());
139             //播放按钮样式
140             ppButton.setText("||");
141             //发送一个Runnable,handler收到之后就会执行run()方法
142             handler.post(new Runnable() {
143                 public void run() {
144                     // 更新进度条状态
145                     if (!isStartTrackingTouch)
146                         seekBar.setProgress(player.getCurrentPosition());
147                     // 1秒之后再次发送
148                     handler.postDelayed(this, 1000);
149                 }
150             });
151         } catch (Exception e) {
152             e.printStackTrace();
153         }
154     }
155     private void findAll(File file, List<File> list) {
156         File[] subFiles = file.listFiles();
157         if (subFiles != null)
158             for (File subFile : subFiles) {
159                 if (subFile.isFile() && subFile.getName().endsWith(".mp3"))
160                     list.add(subFile);
161                 else if (subFile.isDirectory())//如果是目录
162                     findAll(subFile, list); //递归
163             }
164     }
165     public void pp(View view) {
166         //默认从第一首歌开始播放
167         if (!player.isPlaying() && !isPause) {
168             play();
169             return;
170         }
171         Button button = (Button) view;
172         //暂停/播放按钮
173         if ("||".equals(button.getText())) {
174             pause();
175             button.setText("|>");
176         }else if("|>".equals(button.getText())) {
177             resume();
178             button.setText("||");
179         }
180     }
181     private void resume() {
182         if (isPause) {
183             player.start();
184             isPause = false;
185         }
186     }
187     private void pause() {
188         if (player != null && player.isPlaying()) {
189             player.pause();
190             isPause = true;
191         }
192         }
193         } 

示例代码

xml类

 1 <TableLayout
 2         android:orientation="vertical"
 3         android:layout_width="match_parent"
 4         android:layout_height="wrap_content">
 5         <TableRow>
 6             <ListView
 7                 android:id="@+id/list"
 8                   android:layout_width="wrap_content"
 9                   android:layout_height="fill_parent"
10             />
11         </TableRow>
12     </TableLayout>
13     <TextView
14        android:id="@+id/name"
15        android:layout_width="wrap_content"
16        android:layout_height="wrap_content"
17        android:layout_marginTop="50px"
18      />
19     <RelativeLayout
20         android:layout_width="fill_parent"
21         android:layout_height="wrap_content"
22         >
23         <ImageButton
24             android:id="@+id/ib3"
25             android:layout_width="wrap_content"
26              android:layout_height="wrap_content"
27              android:src="@drawable/b"
28              android:background="#00000000"
29             android:layout_alignParentBottom="true"
30         />
31         <SeekBar
32             android:id="@+id/seekBar"
33             style="?android:attr/progressBarStyleHorizontal"
34             android:layout_width="fill_parent"
35             android:layout_height="wrap_content"
36             android:paddingLeft="88dip"
37             android:progressDrawable="@drawable/seekbar"
38             android:thumb="@drawable/thumb"
39             android:layout_alignTop="@id/ib3"
40             android:max="100"
41             android:maxHeight="2.0dip"
42             android:minHeight="2.0dip"
43           />
44         <Button
45             android:id="@+id/bt021"
46             android:layout_width="wrap_content"
47             android:layout_height="wrap_content"
48             android:text="|?"
49             android:onClick="previous"
50             android:layout_toRightOf="@id/ib3"
51             android:background="#00000000"
52             android:layout_marginRight="30px"
53             android:paddingLeft="20dip"
54             android:layout_alignParentBottom="true"
55         />
56         <Button
57             android:id="@+id/pp"
58             android:layout_width="wrap_content"
59             android:layout_height="wrap_content"
60             android:text="?"
61             android:onClick="pp"
62             android:layout_toRightOf="@id/bt021"
63             android:background="#00000000"
64             android:layout_marginRight="30px"
65             android:layout_alignParentBottom="true"
66         />
67         <Button
68               android:layout_width="wrap_content"
69             android:layout_height="wrap_content"
70             android:text="?|"
71             android:onClick="next"
72             android:layout_toRightOf="@id/pp"
73             android:background="#00000000"
74             android:layout_marginTop="20dip"
75             android:layout_alignParentBottom="true"
76         />
77      </RelativeLayout>

示例代码

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:orientation="horizontal"
 4     android:layout_width="fill_parent"
 5     android:layout_height="fill_parent"
 6     android:background="#FFFFFF"
 7     >
 8     <TableLayout
 9         android:orientation="vertical"
10         android:layout_width="match_parent"
11         android:layout_height="wrap_content">
12         <TableRow>
13             <TextView
14                 android:id="@+id/textview"
15                 android:layout_width="fill_parent"
16                 android:layout_height="wrap_content"
17                 />
18         </TableRow>
19     </TableLayout>
20
21 </LinearLayout>

第二个xml

时间: 2024-10-22 23:52:19

Android中从SD卡中读取歌曲的相关文章

将文件放到Android模拟器的SD卡中的两种解决方法

两种方式:一.窗口界面操作1.打开DDMS页面2.打开File Explorer页,如果没有,在Window --> Show View -->File Explorer3.一般就在mnt --> sdcard中4.在sdcard中,点击你要将文件放到的目的文件夹,这里如mp3文件夹5.点击文件夹后,在File Explorer页的右边有两个图标,一个是pull,一个是push,pull是将mp3里面的文件拉出去,push是将外面,如硬盘上的文件推到mp3文件夹里面来. 二.命令行方式启

Android模拟器使用SD卡

在Android的应用开发中经常要用到与SD卡有关的调试,本文就是介绍关于在Android模拟器中SD卡的使用 一.      准备工作 在介绍之前首先做好准备工作,即配好android的应用开发环境 l  JDK 1.6+ l  Android SDK 1.6 (这个版本无关紧要,后面在升级) l  Android SDK Setup l  Eclipse IDE for Java Developers 详细配置方法请参考:http://blog.sina.com.cn/s/blog_4de0

android 读取sd卡中的图片

一.获取读取SD卡的权限 <!--在SDCard中创建与删除文件权限  -->    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>    <!-- 往SDCard写入数据权限 -->    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STO

Android 手持PDA读取SD卡中文件

近两年市场上很多Wince设备都开始转向Android操作系统,最近被迫使用Android开发PDA手持设备.主要功能是扫描登录,拣货,包装,发货几个功能.其中涉及到商品档的时候大概有700左右商品要导入到Android设备中,因为现场操作环境没有WiFi ,所以商品档不能直接访问服务,将商品档记录到txt文件中. 一. 将txt文件存放到SD开中 将商品档编辑成为txt文件然后拷贝到SD卡中,当然也可以存储其他的数据格式,甚至可以使用Sqlite来存储,这里没有这个必要所以就直接使用txt 二

转-Android 之 使用File类在SD卡中读取数据文件

如果需要在程序中使用sdcard进行数据的存储,那么需要在AndroidMainfset.xml文件中 进行权限的配置: Java代码:   <!-- 在sd中创建和删除文件的权限 --> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> <!-- 向SD卡中的写入权限 --> Java代码:   <uses-permission an

Android中播放本地SD卡中歌曲需要的添加的权限

使用MediaPlayer播放本地Mp3文件时,需要注意的访问路径的问题以及访问权限的问题. 1.访问路径:/storage/emulated/0 此路径即为手机的根路径,可以通过下载ES文件浏览器软件查看当前播放的Mp3具体的路径,通过Environment.getExternalStorageDirectory().getPath()获取/storage/emulated/0这个SdCard路径这在组织 void android.media.MediaPlayer.setDataSource

Android中向SD卡读写数据,读SD卡和手机内存

package com.example.sdoperation; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; import android.support.v7.app.Actio

用IO流向存储器或SD卡中存入/读取字符的工具类

FileManager package com.kale.utils; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; imp

Android -- 写xml到SD卡中

信息类                                                                                          private String body; private String number; private int type; private long id; 四个变量,然后有分别set和get.构造函数分别初始化这四个变量. 生成xml标签函数