android如何获取sd卡音乐并解析,Android中从SD卡中读取歌曲

1 privateTextView nameTextView;2 privateSeekBar seekBar;3 privateListView listView;4 private List>data;5 private intcurrent;6 privateMediaPlayer player;7 private Handler handler = newHandler();8 privateButton ppButton;9 private booleanisPause;10 private booleanisStartTrackingTouch;11 protected voidonCreate(Bundle savedInstanceState) {12 super.onCreate(savedInstanceState);13 setContentView(R.layout.mainb);14 ib3=(ImageButton) findViewById(R.id.ib3);15 ib3.setOnClickListener(newOnClickListener() {16 @Override17 public voidonClick(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(newOnItemSelectedListener() {27 @Override28 public void onItemSelected(AdapterView>arg0, View view,29 int arg2, longarg3) {30 TextView tv1=(TextView)view;31 String str=tv1.getText().toString();32 tv.setText(str);33 }34 @Override35 public void onNothingSelected(AdapterView>arg0) {36 }37 });38 sp1=(Spinner) findViewById(R.id.sp1);39 sp1.setOnItemSelectedListener(newOnItemSelectedListener() {40

41 @Override42 public void onItemSelected(AdapterView>arg0, View view,43 int arg2, longarg3) {44 TextView tv1=(TextView)view;45 String str=tv1.getText().toString();46 tv.setText(str);47 }48 @Override49 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 = newMediaPlayer();59 //显示音乐播放器

60 generateListView();61 //进度条监听器

62 seekBar.setOnSeekBarChangeListener(newMySeekBarListener());63 //播放器监听器

64 player.setOnCompletionListener(newMyPlayerListener());65 //意图过滤器

66 IntentFilter filter = newIntentFilter();67 }68 private final class MyPlayerListener implementsOnCompletionListener {69 //歌曲播放完后自动播放下一首歌区

70 public voidonCompletion(MediaPlayer mp) {71 next();72 }73 }74 public voidnext(View view) {75 next();76 }77 public voidprevious(View view) {78 previous();79 }80 private voidprevious() {81 current = current - 1 < 0 ? data.size() - 1 : current - 1;82 play();83 }84 private voidnext() {85 current = (current + 1) %data.size();86 play();87 }88 private final class MySeekBarListener implementsOnSeekBarChangeListener {89 //移动触发

90 public void onProgressChanged(SeekBar seekBar, int progress, booleanfromUser) {91 }92 //起始触发

93 public voidonStartTrackingTouch(SeekBar seekBar) {94 isStartTrackingTouch = true;95 }96 //结束触发

97 public voidonStopTrackingTouch(SeekBar seekBar) {98 player.seekTo(seekBar.getProgress());99 isStartTrackingTouch = false;100 }101 }102 private voidgenerateListView() {103 List list = new ArrayList();104 //获取sdcard中的所有歌曲

105 findAll(Environment.getExternalStorageDirectory(), list);106 //播放列表进行排序,字符顺序

107 Collections.sort(list);108 data = new ArrayList>();109 for(File file : list) {110 Map map = new HashMap();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(newMyItemListener());118 }119 private final class MyItemListener implementsOnItemClickListener {120 public void onItemClick(AdapterView> parent, View view, int position, longid) {121 current =position;122 play();123 }124 }125 private voidplay() {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(newRunnable() {143 public voidrun() {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, Listlist) {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 voidpp(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 voidresume() {182 if(isPause) {183 player.start();184 isPause = false;185 }186 }187 private voidpause() {188 if (player != null &&player.isPlaying()) {189 player.pause();190 isPause = true;191 }192 }193 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
读取SD卡歌曲,你需要先获取读取SD卡的权限,可以通过在AndroidManifest.xml文件添加如下代码实现: ``` <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> ``` 然后,你可以使用MediaStore类来获取SD卡音乐文件,如下所示: ```java String selection = MediaStore.Audio.Media.IS_MUSIC + " != 0"; String[] projection = { MediaStore.Audio.Media._ID, MediaStore.Audio.Media.ARTIST, MediaStore.Audio.Media.TITLE, MediaStore.Audio.Media.DATA, MediaStore.Audio.Media.DISPLAY_NAME, MediaStore.Audio.Media.DURATION }; Cursor cursor = getContentResolver().query( MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, projection, selection, null, null); if (cursor != null) { while (cursor.moveToNext()) { // 获取音乐文件的相关信息 long id = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media._ID)); String artist = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST)); String title = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE)); String data = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA)); String displayName = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME)); long duration = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.DURATION)); // 在这里处理获取到的音乐文件信息 } cursor.close(); } ``` 上述代码,我们先定义了一个查询条件 selection,然后在 projection 数组指定我们需要获取音乐文件信息,接着通过 getContentResolver().query() 方法查询 MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,获取到 Cursor 对象,最后通过 Cursor 对象遍历获取到的音乐文件信息。 需要注意的是,获取到的音乐文件的路径存储在 DATA 列,我们可以通过这个路径来播放音乐。同时,还需要给应用程序授予读取SD卡的权限。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值