论坛首页 移动开发技术论坛

带ListView的音乐播放器

浏览 11309 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-01-23  

带ListView的音乐播放器

 

[功能]

前篇写的是:通过文件名来播放视频 今天说的是:通过MediaStore 来得到目标的Uri 在把之传入MediaPlay 然后再播放

 

所以 会有2个重点:

* 列出emulator 的所有音乐文件

* 音乐播放器

 

 

 

[代码 步骤]

1. 构建界面:main.xml

写道
1 Button 用于音乐播放控制(暂停/继续)
1 TextView 用于显示目标Uri
1 ListView 用于列出所有音乐文件

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<LinearLayout 
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    >
<Button
	android:id="@+id/cmd"  
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Prepare" 
/>
<TextView  
	android:id="@+id/name"  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="NAME"
    />
</LinearLayout>
<ListView  
	android:id="@+id/list"  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    />
</LinearLayout>

 

 

2. 列出所有音乐文件 并转入 adapter

Cursor c = getContentResolver().query(
                MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, 
                null, null, null, null);  
        
        String[] from = {MediaStore.Audio.AudioColumns.TITLE,
        		MediaStore.Audio.AudioColumns.ARTIST};
        int[] to = {android.R.id.text1,android.R.id.text2};
        final CursorAdapter adapter = new SimpleCursorAdapter(this,
                android.R.layout.simple_list_item_2,c, 
                from, to);

 

 

3. 使用之

list.setAdapter(adapter);

 

 

4. 与音乐播放有关的功能

//1. 定义
MediaPlayer mp;

//2. 初始化
mp = new MediaPlayer();

//3. 暂停
mp.pause();

//4. 继续
mp.start();

//5. 判断是否正在播放
mp.isPlaying()

//6.使用目标Uri
mp.release();
mp = MediaPlayer.create(this, uri);

 

 

5. 单击ListView中某个Item 会播放目标音乐资源

public void playMusic(long arg3) throws IllegalArgumentException, IllegalStateException, IOException{
    	Uri uri = Uri.withAppendedPath(
                MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, 
                String.valueOf(arg3));
    	TextView tv = (TextView) findViewById(R.id.name);
    	tv.setText(uri.toString());
    	
    	mp.release();
    	mp = MediaPlayer.create(this, uri);
    	mp.start();
    }


 list.setOnItemClickListener(new OnItemClickListener(){
    		@Override
    		public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
    				long arg3) {
    			// TODO Auto-generated method stub
    			try {
					playMusic(arg3);
				} catch (IllegalArgumentException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (IllegalStateException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
    		}
            });

 

 

 

因为这是个音乐播放器 界面也没什么特别之处 就此略过 只有一个关于所有音乐文件的ListView

 

done!

   发表时间:2010-01-25  
模拟一个String数组,换成ArrayAdapter试试看,好像有问题。
以前我写了一个,就没写出来…… 后来给淡忘了……
0 请登录后投票
   发表时间:2010-01-25  
BarryWei 写道
模拟一个String数组,换成ArrayAdapter试试看,好像有问题。
以前我写了一个,就没写出来…… 后来给淡忘了……

我不清楚你是怎么使用的 我这边还好

我这里就有它的使用情况, 题目:Adapter:SimpleAdapter SimpleCursorAdapter ArrayAdapter

而且有例子下载 你可以下载看看 和你比较一下 或者把你写的贴一下 我好看看是哪里问题
0 请登录后投票
   发表时间:2010-01-29  
gryphone 写道
BarryWei 写道
模拟一个String数组,换成ArrayAdapter试试看,好像有问题。
以前我写了一个,就没写出来…… 后来给淡忘了……

我不清楚你是怎么使用的 我这边还好

我这里就有它的使用情况, 题目:Adapter:SimpleAdapter SimpleCursorAdapter ArrayAdapter

而且有例子下载 你可以下载看看 和你比较一下 或者把你写的贴一下 我好看看是哪里问题

5644646454
0 请登录后投票
   发表时间:2010-01-30  
hongbiangoal 写道
gryphone 写道
BarryWei 写道
模拟一个String数组,换成ArrayAdapter试试看,好像有问题。
以前我写了一个,就没写出来…… 后来给淡忘了……

我不清楚你是怎么使用的 我这边还好

我这里就有它的使用情况, 题目:Adapter:SimpleAdapter SimpleCursorAdapter ArrayAdapter

而且有例子下载 你可以下载看看 和你比较一下 或者把你写的贴一下 我好看看是哪里问题

5644646454

什么意思?
0 请登录后投票
   发表时间:2010-09-06  
楼主可以把这源代码放上来提供下载吗?好学习学习
0 请登录后投票
   发表时间:2011-01-11  
楼主请问
Cursor c = getContentResolver().query( 
                MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,  
                null, null, null, null);   
如何获取指定文件夹的歌曲信息,而不是整个sd卡的。
0 请登录后投票
论坛首页 移动开发技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics