播放SDcard上面的音频文件

这个程序是将sdcard上的音频文件读取出来,将其路径放到ArrayList中,在添加到ListView中,然后通过MediaPlayer播放音频文件~~~

一如既往,有码有真相~~大笑

 

package com.example.sdcardmusicplay;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;

import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;

public class MainActivity extends Activity {

	private MediaPlayer mp;
	private int currentItem=0;//记录当前播放的item
	private ArrayList<String> list = new ArrayList<String>();
	private Button b1, b2, b3, b4, b5;
	private boolean isplay=false;//记录是否在播放

	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		mp = new MediaPlayer();
		b1 = (Button) findViewById(R.id.play);
		b2 = (Button) findViewById(R.id.pause);
		b3 = (Button) findViewById(R.id.stop);
		b4 = (Button) findViewById(R.id.up);
		b5 = (Button) findViewById(R.id.down);
		b2.setEnabled(false);
		b3.setEnabled(false);
		audiolist();

		b1.setOnClickListener(new OnClickListener() {

			public void onClick(View v) {
				playMusic(list.get(currentItem));
				b1.setEnabled(false);
				b2.setText("暂停");
				b3.setEnabled(true);
				isplay = true;

				MainActivity.this.setTitle("当前播放的是:" + list.get(currentItem));
			}

		});

		b2.setOnClickListener(new OnClickListener() {

			public void onClick(View v) {

				if (isplay) {
					MainActivity.this.setTitle("当前播放的是:"
							+ list.get(currentItem));
					mp.pause();
					b1.setEnabled(false);
					b2.setText("继续");
					b3.setEnabled(true);
					isplay = false;
				} else {
					mp.start();
					b1.setEnabled(false);
					b2.setText("暂停");
					b3.setEnabled(true);
					isplay = true;
					MainActivity.this.setTitle("当前播放的是:"
							+ list.get(currentItem));

				}
			}

		});

		b3.setOnClickListener(new OnClickListener() {

			public void onClick(View v) {
				mp.stop();
				b1.setEnabled(true);
				b2.setEnabled(false);
				b3.setEnabled(false);
				MainActivity.this.setTitle("");
			}

		});

		b4.setOnClickListener(new OnClickListener() {

			public void onClick(View v) {
				upOne();
				MainActivity.this.setTitle("当前播放的是:" + list.get(currentItem));
				isplay = true;
				b1.setEnabled(false);
				b2.setEnabled(true);
				b2.setText("暂停");
				b3.setEnabled(true);
			}

		});

		b5.setOnClickListener(new OnClickListener() {

			public void onClick(View v) {
				nextOne();
				isplay = true;
				b1.setEnabled(false);
				b2.setEnabled(true);
				b2.setText("暂停");
				b3.setEnabled(true);
				MainActivity.this.setTitle("当前播放的是:" + list.get(currentItem));
			}

		});

		mp.setOnCompletionListener(new OnCompletionListener() {

			@Override
			public void onCompletion(MediaPlayer mp) {
				// TODO Auto-generated method stub

				Toast.makeText(MainActivity.this, "播放完毕~~~", Toast.LENGTH_SHORT);

				MainActivity.this.setTitle("");

			}

		});

	}

	public void audiolist() {/制作ListView

		getFiles("/sdcard/");///读取音频文件,将其添加到list中
		ListView lv = (ListView) findViewById(R.id.list);

		ArrayAdapter<String> aa = new ArrayAdapter<String>(this,
				android.R.layout.simple_list_item_1, list);
		lv.setAdapter(aa);

		lv.setOnItemClickListener(new OnItemClickListener() {

			public void onItemClick(AdapterView<?> arg0, View arg1,
					int position, long arg3) {
				currentItem = position;
				playMusic(list.get(position));
				MainActivity.this.setTitle("当前播放的是:"+list.get(currentItem));
			}

		});

	}

	public void playMusic(String path) {//根据path播放音频

		mp.reset();
		try {
			mp.setDataSource(path);
		} catch (IllegalArgumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SecurityException 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();
		}

		try {
			mp.prepare();
		} catch (IllegalStateException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		mp.start();

		b2.setEnabled(true);
		b2.setText("暂停");

	}

	public void getFiles(String url){//查找获取音频文件,添加到list中
		
		File files=new File(url);
		File [] file=files.listFiles();
		if(file!=null){//有可能是空目录,所以用来排除空目录
			
			
	
		
		for(File f:file){/遍历file数组
			if(f.isDirectory()){
				getFiles(f.getAbsolutePath());///递归调用
				
			}else{
				if(isAudioFile(f.getPath())){/调用方法判断是不是音频文件
					
					list.add(f.getPath());
					
				}
				
				
			}
			
			
			
		}
		}
	}
	
	
	public boolean isAudioFile(String path){
		String []  formatt={"mp3","wav","3gp"};
		
		for(String s:formatt){
			
			if(path.contains(s)){
				
				return true;
				
			}
			
			
		}
		
		
		return false;
	}
	
	
	public void nextOne(){下一首
		
		
		if(++currentItem>=list.size()){
			
			currentItem=0;
			
			
		} 
		
		playMusic(list.get(currentItem));
		
		
		
	}
	
	public void upOne(){上一首
		
		if(--currentItem>=0){
			if(currentItem>=list.size()){
				
				currentItem=0;
				
			}
			
			
		}else{
			
			currentItem=list.size()-1;
			
		}
		
		playMusic(list.get(currentItem));
	}
	
	
	protected void onDestroy() {// //当程序退出时,释放资源
		// TODO Auto-generated method stub
		mp.release();

		super.onDestroy();
	}
		
}


 

布局文件源码

 

 

 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
       tools:context=".MainActivity"
       android:orientation="vertical"
        >

    <ListView
        android:id="@+id/list"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:isScrollContainer="true"
      android:layout_weight="1"
        
        android:drawSelectorOnTop="false"
        />
<LinearLayout
     android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:layout_weight="6"
    >
    <Button
        android:id="@+id/play"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="播放"
        />
    <Button
        android:id="@+id/pause"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="暂停/继续"
        />
    
    <Button
        android:id="@+id/stop"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="停止"
        />
    
    <Button
        android:id="@+id/up"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="上一首"
        />
    
    <Button
        android:id="@+id/down"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="下一首"
        />
    
    </LinearLayout>
    
    
    
    
</LinearLayout>


 

 

运行截图:

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值