我有listview,其中包含带播放按钮和搜索栏的音频文件列表.我使用基本适配器显示了列表视图.

当我单击列表视图的播放按钮时,我想播放音频文件.我成功地实现了这个,但是当我点击列表中的另一个播放按钮时,两个音频文件正在连续播放,它将继续播放所有播放按钮.如何限制媒体播放器在一个位置播放,如果我点击另一个图标,则必须停止旧媒体播放器并开始播放新媒体播放器.谁能说我怎么实现这个呢?

嗨,我正在使用此代码

public class PlayerList extends Activity {

private static final String TAG = "log";

ListView listV;

ArrayList> arrList = new ArrayList>();;

String[] strArray = { "/mnt/sdcard/Nal.mp3", "/mnt/sdcard/Nal2.mp3",

"/mnt/sdcard/Nal3.mp3", "/mnt/sdcard/sample1.mp3", };

@Override

protected void onCreate(Bundle savedInstanceState) {

// TODO Auto-generated method stub

super.onCreate(savedInstanceState);

setContentView(R.layout.homepage);

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()

.permitAll().build();

StrictMode.setThreadPolicy(policy);

listV = (ListView) findViewById(R.id.HomePagelistView1);

for (int i = 0; i < strArray.length; i ) {

HashMap hmap = new HashMap();

hmap.put("title", "File Name");

hmap.put("description", "File description");

hmap.put("url", strArray[i]);

arrList.add(hmap);

}

FileListAdapter sAdapter = new FileListAdapter(arrList, PlayerList.this);

listV.setAdapter(sAdapter);

}

}

FileListAdapter文件如下所示

public class FileListAdapter extends BaseAdapter implements

OnCompletionListener, OnSeekBarChangeListener {

private MediaPlayer mp;

private Handler mHandler = new Handler();;

private Utilities utils;

SeekBar seekBar;// = (SeekBar) findViewById(R.id.homeList_seekBar1);

String songPath = "";

// ImageView imageVPlay;

private ArrayList> data;

private LayoutInflater inflater = null;

public FileListAdapter(ArrayList> data,

Context context) {

this.data = data;

inflater = (LayoutInflater) context

.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

}

public int getCount() {

return data.size();

}

public Object getItem(int position) {

return position;

}

public long getItemId(int position) {

return position;

}

public View getView(final int position, View convertView,

ViewGroup parent) {

View vi = convertView;

if (convertView == null)

vi = inflater.inflate(R.layout.homelist, parent, false);

final ImageView imageVDownload = (ImageView) vi

.findViewById(R.id.homeListimageDownload); // download

final ImageView imageVPlay = (ImageView) vi

.findViewById(R.id.homeListimagePlay); // play

final TextView textVTitle = (TextView) vi

.findViewById(R.id.homeListTextTitle); // email ID

final TextView textVDescription = (TextView) vi

.findViewById(R.id.homeListTextDesc); // email ID

seekBar = (SeekBar) vi.findViewById(R.id.homeList_seekBar1);

textVTitle.setText(data.get(position).get("title"));

textVDescription.setText(data.get(position).get("description"));

// /// set image tick and download

String loadFilePath = data.get(position).get("url");

// String loadFileName = data.get(position).get("title");

File ffPath = new File(loadFilePath);

String loadfileNameWithExt = ffPath.getName();

Log.i(TAG, "load file and name path " " " loadfileNameWithExt

" " loadFilePath);

imageVPlay.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

String selectFilePath = data.get(position).get("url");

String selectFileName = data.get(position).get("title");

Log.i(TAG, "selected file and name path " selectFileName

" " selectFilePath);

songPath = selectFilePath;

mediaplayerMethod(selectFilePath);

imageVPlay.setImageResource(R.drawable.list_pause);

textVTitle.setVisibility(View.INVISIBLE);

textVDescription.setVisibility(View.INVISIBLE);

seekBar.setVisibility(View.VISIBLE);

}

});

return vi;

}

protected void mediaplayerMethod(String filepath) {

Log.d(TAG, "mediaplayerMethod audio file path " filepath);

mp = new MediaPlayer();

mp.setOnCompletionListener(FileListAdapter.this); // Important

seekBar.setOnSeekBarChangeListener(FileListAdapter.this);

utils = new Utilities();

playSong(filepath);

}

private void playSong(final String fileptath) {

final Handler handler = new Handler() {

@Override

public void handleMessage(Message message) {

String xmlString = (String) message.obj;

Log.d(TAG, "handleMessage ");

try {

// mp.prepare();

mp.start();

seekBar.setProgress(0);

seekBar.setMax(100);

updateProgressBar();

} catch (IllegalArgumentException e) {

e.printStackTrace();

} catch (IllegalStateException e) {

e.printStackTrace();

}

}

};

Thread thread = new Thread() {

@Override

public void run() {

Log.d(TAG, "run ");

try {

mp.reset();

mp.setDataSource(fileptath);

Log.i(TAG, "internal file");

mp.prepare();

} catch (IllegalArgumentException e) {

e.printStackTrace();

} catch (IllegalStateException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

Message message = handler.obtainMessage(1, "");

handler.sendMessage(message);

}

};

thread.start();

}

public void updateProgressBar() {

mHandler.postDelayed(mUpdateTimeTask, 100);

}

private Runnable mUpdateTimeTask = new Runnable() {

public void run() {

try {

long totalDuration = mp.getDuration();

long currentDuration = mp.getCurrentPosition();

int progress = (int) (utils.getProgressPercentage(

currentDuration, totalDuration));

seekBar.setProgress(progress);

try {

double progVal = (progress / 100.0) * (360.0);

int progInt = (int) Math.ceil(progVal);

} catch (NumberFormatException e) {

Log.e(TAG, "NumberFormatException " e);

}

// Running this thread after 100 milliseconds

mHandler.postDelayed(this, 100);

} catch (IllegalStateException e) {

Log.e(TAG, "IllegalStateException " e);

}

}

};

@Override

public void onCompletion(MediaPlayer mp) {

mp.stop();

mp.release();

}

@Override

public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) {

// TODO Auto-generated method stub

}

@Override

public void onStartTrackingTouch(SeekBar arg0) {

// TODO Auto-generated method stub

mHandler.removeCallbacks(mUpdateTimeTask);

}

@Override

public void onStopTrackingTouch(SeekBar arg0) {

// TODO Auto-generated method stub

mHandler.removeCallbacks(mUpdateTimeTask);

int totalDuration = mp.getDuration();

int currentPosition = utils.progressToTimer(seekBar.getProgress(),

totalDuration);

// forward or backward to certain seconds

mp.seekTo(currentPosition);

updateProgressBar();

}

}// FileListAdapter

解决方法:

您可以使用此代码,因为它为我工作:

public class soundTest extends Activity {

private ListView lv1;

private String lv_arr[]={"test 1","test 2","test 3","test 4","test 5"};

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

lv1=(ListView)findViewById(R.id.ListView01);

lv1.setAdapter(new ArrayAdapter(this,R.layout.list_item, lv_arr));

lv1.setOnItemClickListener(new OnItemClickListener() {

public void onItemClick(AdapterView> parent, View view,int position, long id) {

if (lv1.getItemAtPosition(position)=="test 1") {

MediaPlayer mp = MediaPlayer.create(getApplicationContext(),R.raw.sound1);

mp.start();

mp.setOnCompletionListener(new OnCompletionListener() {

public void onCompletion(MediaPlayer mp) {

mp.release();

}

});

}

if (lv1.getItemAtPosition(position)=="test 2") {

MediaPlayer mp = MediaPlayer.create(getApplicationContext(),R.raw.sound2);

mp.start();

mp.setOnCompletionListener(new OnCompletionListener() {

public void onCompletion(MediaPlayer mp) {

mp.release();

}

});

}

//And the rest of the sounds 3,4,5.

}

});

}

}

全局变量MediaPlayer需要设置为private static.这引起了我好几次.

如果您发现任何问题,请回复.来源:https://www.icode9.com/content-4-279151.html

android 音频播放插件,在android中的listview中实现音频播放器相关推荐

  1. gradle 打包Android,用Gradle 插件打包android程序

    类型:社交聊天大小:1012KB语言:中文 评分:.0 标签: 立即下载 android gradle 的插件终于把混淆代码的task集成进去了,加上最近,android studio 用的是grad ...

  2. android 显示天气插件下载,Android天气插件

    Android天气插件 天气插件Android SDK,包括实况天气.空气质量.灾害预警.生活指数等天气内容,支持在Android应用任意位置加入天气内容,并可生成天气频道页面. 下载 # 适配版本 ...

  3. [Android]解决ClickableSpan中点击后ListView中item的长按冲突的问题

    以下内容为原创,转载请注明: 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/3823429.html 项目中碰到一个问题,情景是这样的: 有一个Lis ...

  4. 如何在Android中的ListView中延迟加载图像

    我正在使用ListView显示一些图像和与这些图像相关的标题. 我正在从互联网上获取图像. 有没有一种方法可以延迟加载图像,以便在显示文本时不会锁定UI并在下载图像时显示它们? 图像总数不固定. #1 ...

  5. Android动态秒针插件app,Android 8.1 Launcher3实现动态指针时钟功能

    本文主要实现功能,可能有不合理的地方 首先创建一个实现功能的工具里,直接上代码: import android.content.Context; import android.graphics.Bit ...

  6. android studio lambda插件,在Android Studio中使用Lambda表达式(retrolambda)

    在Android Studio中使用Lambda表达式 要在Android Studio中使用Lambda表达式,需要借助一个gradle插件来完成. A gradle plugin for gett ...

  7. android开发rn插件,在Android原生应用中嵌入React Native

    开发工具:Android Studio , WebStorm 参考链接:React Native官方中文文档 一.创建React Native项目 1.在本地React Native项目目录下,创建一 ...

  8. android studio 2d插件,在Android Studio中添加Overlap2D库作为依赖项

    include 'desktop', 'core', 'Overlap2dRuntime' project(':Overlap2dRuntime').projectDir = new File(set ...

  9. android热更新插件,与Android热更新方案Amigo的再次接触

    Amigo 作为一个"过气"的的热修复框架,用来学习和了解一下热修复的基本原理还是很好的.本文是本系列的第三篇. 前两篇: 与Android 热更新方案Amigo的初次接触 原作者 ...

  10. gradle版本与android的gradle插件版本兼容Unable to find method org.gradle.api.tasks.compile.CompileOptions.setB

    今天踩了一个gradle版本的坑,记录一下 一.编译报错,如下完整报错日志: 编译失败ERROR:Unable to find method 'org.gradle.api.tasks.compile ...

最新文章

  1. lighttpd php7 源码安装,如何在CentOS 7上安装Lighttpd与PHP-FPM和MariaDB
  2. 【bzoj5084】hashit 广义后缀自动机+树链的并+STL-set
  3. Subversion客户端认证凭证缓存总结
  4. linux shell后台运行
  5. 揭露:人体十大最佳北京上门×××黄金时间
  6. android - 常用知识点以及代码片段(不断更新)
  7. Mybatis各种模糊查询及#和$区别
  8. java 百度poi_Android应用中使用百度地图API之POI(三)
  9. 解读程序员的武侠世界,顶级程序员是内外兼修的大侠,那么你呢?
  10. 根据用户名或者厂商名称生成相关的弱口令
  11. Tensorflow笔记(一): tensorflow的安装
  12. ASP.NET页面间的传值方法(2)
  13. 无法安装 苹方字体(萍方字体/PingFang SC)字体的解决办法/字体安装失败解决方案
  14. 国家社科基金项目清单、申报书填写指南和课题申报书模板
  15. Android跳转应用市场更新自己《完美适配大部分手机应用商店》
  16. 用matlab怎么仿真升降压电路,(最新整理)升降压斩波电路matlab仿真
  17. nginx直接打印输出_ngnix配置打印请求入参和出参消息
  18. 计算机由哪几种显卡,各类显卡大比拼,你会选择哪一款显卡使用?
  19. 宣传片拍摄制作,后期剪辑师的重要性
  20. 9个非常有意思的HTML5动画推荐

热门文章

  1. 190725每日一句
  2. 190601每日一句
  3. 190117每日一句
  4. Atitit 架构师的技术框架体系图 各种引擎列表 脚本引擎 groovy beanshel php nodejs rhino等 表达式引擎技术 Ognl/MVELl等 通讯, rest 命令解
  5. Atitit webdav 的问题 -------------大文件传输问题 在某些版本的 Windows 操作系统中,WebDAV 驱动器的最大文件大小被限制为 50MB。如果你试图复制超过 5
  6. Atitit cko之道首席知识官之道 attilax著 艾龙著 1. 2 2. 第 1 章 知识管理到底是什么,有什么用/1 2 3. 1.1 知识管理全景/1 1.2 波士顿矩阵/3 1.2.
  7. atitit 碎片化学习.docx attilax 总结
  8. 专访Virtu创始人Doug Cifu:找到你做得最好的那件事,反复做!
  9. 【疑问】互联网公募基金的销售是繁荣,还是乱象?
  10. Rust : 递归、效率与替代、溢出