自己写了一个录音功能,现在通过File把音频文件放在了listview上显示,怎么通过点击listview的item播放这个录音
1条回答 默认 最新
- usecf 2016-06-29 06:41关注
package com.ar.mediaplayeractivity;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;import android.app.Activity;
import android.content.Intent;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
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.EditText;
import android.widget.ListView;
import android.widget.Toast;public class Media2DPlayer extends Activity {
private static final String TAG = "Media2DPlayer"; private ListView listView; private List<String> lstFile =new ArrayList<String>(); //结果 List private String videoPath = "/storage/emulated/0/2D"; //视频路径 private String extName = "mp4";//扩展名 private boolean bIterative = true;//查找子文件夹,搜索固定路径 private SurfaceView surfaceView; private MediaPlayer mediaPlayer; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.main2); setTitle(R.string.play2D_Title); //我们设置一个List集合,然后向里边添加几条数据 GetFiles(videoPath,extName,bIterative); //获取xml文件中listView控件 listView = (ListView)findViewById(R.id.list2d); //然后为listView控件调用setAdapter方法,让数据显示在界面上。 listView.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,lstFile)); //为listView对象进行监听:当点击子项目的时候触发 listView.setOnItemClickListener(new ItemClickEvent()); surfaceView =(SurfaceView) this.findViewById(R.id.surfaceView2D); /*下面设置Surface不维护自己的缓冲区,而是等待屏幕的渲染引擎将内容推送到用户面前*/ surfaceView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); surfaceView.getHolder().setFixedSize(176, 144); //设置分辨率 mediaPlayer = new MediaPlayer();
}
//继承OnItemClickListener,当子项目被点击的时候触发
private final class ItemClickEvent implements OnItemClickListener{
@Override
//这里需要注意的是第三个参数arg2,这是代表单击第几个选项
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
//通过单击事件,获得单击选项的内容
String text = listView.getItemAtPosition(arg2).toString();
//通过吐丝对象显示出来。
Toast.makeText(getApplicationContext(), text, 1).show();mediaPlayer.reset(); mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); try { mediaPlayer.setDataSource(text); } 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(); }//设置需要播放的视频 mediaPlayer.setDisplay(surfaceView.getHolder());//把视频画面输出到SurfaceView try { mediaPlayer.prepare(); } catch (IllegalStateException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } mediaPlayer.start(); } } public void GetFiles(String Path, String Extension,boolean IsIterative) //搜索目录,扩展名,是否进入子文件夹 { File[] files =new File(Path).listFiles(); for (int i =0; i < files.length; i++) { File f = files[i]; if (f.isFile()) { if (f.getPath().substring(f.getPath().length() - Extension.length()).equals(Extension)) //判断扩展名 lstFile.add(f.getPath()); if (!IsIterative) break; } else if (f.isDirectory() && f.getPath().indexOf("/.") == -1) //忽略点文件(隐藏文件/文件夹) GetFiles(f.getPath(), Extension, IsIterative); } } @Override protected void onResume() { // TODO Auto-generated method stub if(!mediaPlayer.isPlaying()) mediaPlayer.start(); super.onResume(); } @Override protected void onPause() { // TODO Auto-generated method stub if(mediaPlayer.isPlaying()) mediaPlayer.pause(); super.onPause(); } @Override protected void onDestroy() { // TODO Auto-generated method stub if(mediaPlayer.isPlaying()) mediaPlayer.stop(); mediaPlayer.release(); super.onDestroy(); }
}
解决 无用评论 打赏 举报
悬赏问题
- ¥15 乘性高斯噪声在深度学习网络中的应用
- ¥15 运筹学排序问题中的在线排序
- ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
- ¥30 求一段fortran代码用IVF编译运行的结果
- ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
- ¥15 C++ 头文件/宏冲突问题解决
- ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
- ¥50 安卓adb backup备份子用户应用数据失败
- ¥20 有人能用聚类分析帮我分析一下文本内容嘛
- ¥30 python代码,帮调试,帮帮忙吧