- 浏览: 11367 次
- 性别:
- 来自: 北京
最新评论
-
zhangxpower:
我也遇到了这个问题。。。不知道怎么解决 。。还是说 要用med ...
android的音乐播放器 出了点问题不知道是什么原因,有时候出现死循环
12-17 12:04:26.415: INFO/StagefrightPlayer(34): setDataSource('/mnt/sdcard/WonderGirls_TellMe.mp3')
12-17 12:04:26.415: ERROR/MediaPlayer(365): start called in state 2
12-17 12:04:26.415: ERROR/MediaPlayer(365): error (-38, 0)
12-17 12:04:26.415: ERROR/MediaPlayer(365): Error (-38,0)
12-17 12:04:26.425: WARN/InputManagerService(60): Starting input on non-focused client com.android.internal.view.IInputMethodClient$Stub$Proxy@43e388e8 (uid=10032 pid=365)
12-17 12:04:26.445: INFO/StagefrightPlayer(34): setDataSource('/mnt/sdcard/Trouble is a friend.mp3')
12-17 12:04:26.445: ERROR/MediaPlayer(365): start called in state 2
12-17 12:04:26.445: ERROR/MediaPlayer(365): error (-38, 0)
12-17 12:04:26.445: ERROR/MediaPlayer(365): Error (-38,0)
12-17 12:04:26.455: WARN/InputManagerService(60): Starting input on non-focused client com.android.internal.view.IInputMethodClient$Stub$Proxy@43e388e8 (uid=10032 pid=365)
12-17 12:04:26.545: INFO/StagefrightPlayer(34): setDataSource('/mnt/sdcard/sweet dream.mp3')
12-17 12:04:26.675: ERROR/MediaPlayer(365): start called in state 2
12-17 12:04:26.675: ERROR/MediaPlayer(365): error (-38, 0)
12-17 12:04:26.675: ERROR/MediaPlayer(365): Error (-38,0)
12-17 12:04:26.685: WARN/InputManagerService(60): Starting input on non-focused client com.android.internal.view.IInputMethodClient$Stub$Proxy@43e388e8 (uid=10032 pid=365)
12-17 12:04:26.705: INFO/StagefrightPlayer(34): setDataSource('/mnt/sdcard/WonderGirls_TellMe.mp3')
12-17 12:04:26.705: ERROR/MediaPlayer(365): start called in state 2
12-17 12:04:26.715: ERROR/MediaPlayer(365): error (-38, 0)
12-17 12:04:26.715: ERROR/MediaPlayer(365): Error (-38,0)
12-17 12:04:26.745: WARN/InputManagerService(60): Starting input on non-focused client com.android.internal.view.IInputMethodClient$Stub$Proxy@43e388e8 (uid=10032 pid=365)
12-17 12:04:26.755: INFO/StagefrightPlayer(34): setDataSource('/mnt/sdcard/Trouble is a friend.mp3')
12-17 12:04:26.765: ERROR/MediaPlayer(365): start called in state 2
package fly.mediaplayer; import java.io.File; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Random; import android.app.Activity; import android.media.MediaPlayer; import android.os.Bundle; import android.os.Environment; import android.os.Handler; import android.os.Message; import android.view.View; import android.view.View.OnClickListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.ListView; import android.widget.SeekBar; import android.widget.SimpleAdapter; import android.widget.Toast; /** * 音乐播放器 * */ public class MainActivity extends Activity { private ListView listView; private EditText title; SeekBar bar;// 进度条 private Map<String, String> listpath = new HashMap<String, String>();// 存储音乐名称和绝对路径 MediaPlayer mediaPlayer = new MediaPlayer(); private Handler handler = new UIHandler(); private boolean pause; AdapterView<?> parent; int position = -1; int model = 0;// 播放模式 :0 随机 :1 顺序:2 单曲循环 List<Map<String, Object>> paths = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // 获得视图 listView = (ListView) this.findViewById(R.id.list); title = (EditText) this.findViewById(R.id.title); bar = (SeekBar) this.findViewById(R.id.lenghtBar); Button pause = (Button) this.findViewById(R.id.pause); Button reset = (Button) this.findViewById(R.id.reset); Button stop = (Button) this.findViewById(R.id.stop); Button down = (Button) this.findViewById(R.id.down); Button up = (Button) this.findViewById(R.id.up); Button model = (Button) this.findViewById(R.id.model); // 按钮添加事件 pause.setOnClickListener(new ButtonClickListener()); reset.setOnClickListener(new ButtonClickListener()); stop.setOnClickListener(new ButtonClickListener()); down.setOnClickListener(new ButtonClickListener()); up.setOnClickListener(new ButtonClickListener()); model.setOnClickListener(new ButtonClickListener()); bar.setOnSeekBarChangeListener(new SeekBarChangeListener()); paths = getList();// 获得音乐文件列表 SimpleAdapter adapter = new SimpleAdapter(this, paths, R.layout.list, new String[] { "path", "lenght" }, new int[] { R.id.path, R.id.lenght }); listView.setAdapter(adapter); listView.setOnItemClickListener(new ListOnClickListener());// 添加点击事件 new Thread(new BarThread()).start(); } /** * SeekBar重绘 * */ private class UIHandler extends Handler { public void handleMessage(Message msg) {// 运行在主线程中 int size = msg.getData().getInt("seek"); bar.setProgress(size); } } /** * 进度条拖拉监听 * */ private class SeekBarChangeListener implements SeekBar.OnSeekBarChangeListener { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { if (mediaPlayer.isPlaying()) { mediaPlayer.stop(); mediaPlayer.seekTo(seekBar.getProgress()); play(); } } } /** * 进度条线程 * */ private class BarThread implements Runnable { public void run() { bar.setMax(mediaPlayer.getDuration()); while (mediaPlayer.getCurrentPosition() <= mediaPlayer .getDuration()) { Message ms = new Message(); ms.getData().putInt("seek", mediaPlayer.getCurrentPosition()); handler.sendMessage(ms); try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } } } } /** * 按钮事件监听器 * */ private final class ButtonClickListener implements OnClickListener { @Override public void onClick(View v) { if (position >= 0) { switch (v.getId()) { case R.id.pause: pause(); break; case R.id.reset: reset(); break; case R.id.stop: stop(); break; case R.id.down: down(); break; case R.id.up: up(); break; case R.id.model: if (model == 0) { model = 1; ((Button) v).setText(R.string.order); } else if (model == 1) { model = 2; ((Button) v).setText(R.string.loop); } else { model = 0; ((Button) v).setText(R.string.random); } break; } } else { Toast.makeText(getApplicationContext(), R.string.choice, Toast.LENGTH_LONG).show(); } } /** * 下一首 * */ private void down() { if (position + 1 < paths.size()) { position++; initMediaplayer(parent, position); play(); } else { stop(); Toast.makeText(getApplicationContext(), R.string.last, Toast.LENGTH_LONG).show(); } } /** * 上一首 * */ private void up() { if (position == 0) { stop(); Toast.makeText(getApplicationContext(), R.string.first, Toast.LENGTH_LONG).show(); } else { position = position - 1; initMediaplayer(parent, position); play(); } } } /** * ListView点击事件监听器 * */ private final class ListOnClickListener implements OnItemClickListener { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { initMediaplayer(parent, position); mediaPlayer.setOnCompletionListener(new CompletionListener(parent, position)); setViewAndPosition(parent, position); play();// 播放 } } /** * 存储当前的视图和位置 * */ private void setViewAndPosition(AdapterView<?> parent, int position) { this.parent = parent; this.position = position; } /** * 获得随即播放点 * */ private int getRandom(AdapterView<?> parent, int position) { position = new Random().nextInt(parent.getChildCount()); return position; } /** * 获得顺序播放点 * */ private int getDown(AdapterView<?> parent, int position) { position += 1; if (position > parent.getChildCount() - 1) { position = 0; } return position; } /** * 播放完后 0.随即播放 1.顺序播放 2.单曲循环 * */ private class CompletionListener implements MediaPlayer.OnCompletionListener { private int position; private AdapterView<?> parent; public CompletionListener(AdapterView<?> parent, int position) { super(); this.position = position; this.parent = parent; } @Override public void onCompletion(MediaPlayer mp) { switch (model) { case 0: position = getRandom(parent, position); break; case 1: position = getDown(parent, position); break; case 2: break; } setViewAndPosition(parent, position); initMediaplayer(parent, position); play(); } } /** * 初始化 MediaPlayer * */ private void initMediaplayer(AdapterView<?> parent, int position) { @SuppressWarnings("unchecked") Map<String, String> map = (Map<String, String>) parent .getItemAtPosition(position); String path = map.get("path");// 获得触发事件的Item title.setText(path);// 设置标题 String realPath = listpath.get(path);// 获得绝对路径 mediaPlayer.reset(); try { mediaPlayer.setDataSource(realPath); } catch (Exception e) { e.printStackTrace(); } } /** * 重置 * */ private void reset() { if (mediaPlayer.isPlaying()) { mediaPlayer.seekTo(0); } else { if (title != null) play(); } } /** * 暂停 * */ private void pause() { if (mediaPlayer.isPlaying()) { mediaPlayer.pause(); pause = true; } else { play(); } } /** * 停止 * */ private void stop() { if (mediaPlayer.isPlaying()) { mediaPlayer.stop(); pause = false; } } /** * 播放 * */ private void play() { try { if (!pause) { mediaPlayer.prepare(); } mediaPlayer.start(); } catch (Exception e) { e.printStackTrace(); } } /** * 获取音乐列表 * */ private List<Map<String, Object>> getList() { File file = new File(Environment.getExternalStorageDirectory() .toString());// 获得SDCard File[] files = file.listFiles(); int lenght = 0; int m = 0; int s = 0; List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); // 获得所有的音乐文件 for (File filepath : files) { if (filepath.getName().endsWith(".mp3")) { Map<String, Object> lists = new HashMap<String, Object>(); try { mediaPlayer.reset(); mediaPlayer.setDataSource(filepath.toString()); mediaPlayer.prepare(); lenght = mediaPlayer.getDuration(); lenght = lenght / 1000; m = lenght / 60; s = lenght - m * 60; } catch (Exception e) { e.printStackTrace(); } lists.put("path", filepath.getName()); lists.put( "lenght", String.format("%02d", m) + ":" + String.format("%02d", s)); list.add(lists); listpath.put(filepath.getName(), filepath.toString()); } } return list; } }
评论
抱着个错:start called in state 2
相关推荐
在Android平台上,构建一个基于Service的mini音频播放器是一个常见的需求,这可以帮助用户在后台持续播放音乐,即使离开应用程序也能保持播放状态。本项目的核心组件包括`Service`、`MediaPlayer`以及`...
----------------------------------- Android 编程基础 1 封面----------------------------------- Android 编程基础 2 开放手机联盟 --Open --Open --Open --Open Handset Handset Handset Handset Alliance ...
修炼成Javascript中级程序员必知必会_资源分享
内容概要:本文详细介绍了如何使用MATLAB的深度学习工具箱,在果树病虫害识别任务中从数据准备、模型设计、训练优化到最后的模型评估与应用全流程的具体实施步骤和技术要点。涵盖了MATLAB深度学习工具箱的基本概念及其提供的多种功能组件,如卷积神经网络(CNN)的应用实例。此外,文中还具体讲述了数据集的收集与预处理方法、不同类型的深度学习模型搭建、训练过程中的超参数设定及其优化手段,并提供了病虫害识别的实际案例。最后展望了深度学习技术在未来农业领域的潜在影响力和发展前景。 适合人群:对深度学习及农业应用感兴趣的科研人员、高校师生和相关从业者。 使用场景及目标:①希望掌握MATLAB环境下构建深度学习模型的方法和技术细节;②从事果树病虫害管理研究或实践,寻找高效的自动化解决方案。 阅读建议:在阅读本文之前,建议读者熟悉基本的MATLAB编程环境及初步了解机器学习的相关概念。针对文中涉及的理论和技术难点,可以通过官方文档或其他教程进行补充学习。同时,建议动手实践每一个关键点的内容,在实践中加深理解和掌握技能。
nodejs010-nodejs-block-stream-0.0.7-1.el6.centos.alt.noarch.rpm
机械模型与技术交底书的融合:创新点详解与解析,机械模型加技术交底书,有创新点 ,机械模型; 技术交底书; 创新点,创新机械模型与技术交底书详解
免费JAVA毕业设计 2024成品源码+论文+数据库+启动教程 启动教程:https://www.bilibili.com/video/BV1SzbFe7EGZ 项目讲解视频:https://www.bilibili.com/video/BV1Tb421n72S 二次开发教程:https://www.bilibili.com/video/BV18i421i7Dx
免费JAVA毕业设计 2024成品源码+论文+数据库+启动教程 启动教程:https://www.bilibili.com/video/BV1SzbFe7EGZ 项目讲解视频:https://www.bilibili.com/video/BV1Tb421n72S 二次开发教程:https://www.bilibili.com/video/BV18i421i7Dx
nodejs010-nodejs-cmd-shim-1.1.0-4.1.el6.centos.alt.noarch.rpm
西门子四轴卧加后处理系统:828D至840D兼容,四轴联动高效加工解决方案,支持图档处理及试看程序。,西门子四轴卧加后处理,支持828D~840D系统,支持四轴联动,可制制,看清楚联系,可提供图档处理试看程序 ,核心关键词:西门子四轴卧加后处理; 828D~840D系统支持; 四轴联动; 制程; 联系; 图档处理试看程序。,西门子四轴卧加后处理程序,支持多种系统与四轴联动
基于黏菌优化算法(SMA)的改进与复现——融合EO算法更新策略的ESMA项目报告,黏菌优化算法(SMA)复现(融合EO算法改进更新策略)——ESMA。 复现内容包括:改进算法实现、23个基准测试函数、多次实验运行并计算均值标准差等统计量、与SMA对比等。 程序基本上每一步都有注释,非常易懂,代码质量极高,便于新手学习和理解。 ,SMA复现;EO算法改进;算法实现;基准测试函数;实验运行;统计量;SMA对比;程序注释;代码质量;学习理解。,标题:ESMA算法复现:黏菌优化与EO算法融合改进的实证研究
基于MATLAB的Stewart平台并联机器人仿真技术研究与实现:Simscape环境下的虚拟模拟分析与应用,MATLAB并联机器人Stewart平台仿真simscape ,MATLAB; 并联机器人; Stewart平台; 仿真; Simscape; 关键技术。,MATLAB中Stewart平台并联机器人Simscape仿真
Grad-CAM可视化医学3D影像
探索comsol泰勒锥:电流体动力学的微观世界之旅,comsol泰勒锥、电流体动力学 ,comsol泰勒锥; 电流体动力学; 锥形结构; 电场影响,COMSOL泰勒锥与电流体动力学研究
免费JAVA毕业设计 2024成品源码+论文+数据库+启动教程 启动教程:https://www.bilibili.com/video/BV1SzbFe7EGZ 项目讲解视频:https://www.bilibili.com/video/BV1Tb421n72S 二次开发教程:https://www.bilibili.com/video/BV18i421i7Dx
PFC6.03D模型动态压缩模拟与SHPB霍普金森压杆系统理论及实验数据处理技术解析,PFC6.03D模型,动态压缩模拟,还包括: SHPB霍普金森压杆系统理论知识介绍,二波法和三波法处理实验数据,提出三波波形,计算动态压缩强度等 ,PFC模型; 动态压缩模拟; SHPB霍普金森压杆系统; 理论介绍; 二波法处理; 三波法处理; 三波波形; 动态压缩强度。,"PFC模型下的动态压缩模拟及SHPB理论实践研究"
ProASCI 开发板原理图,适用于A3P3000
免费JAVA毕业设计 2024成品源码+论文+录屏+启动教程 启动教程:https://www.bilibili.com/video/BV1SzbFe7EGZ 项目讲解视频:https://www.bilibili.com/video/BV1Tb421n72S 二次开发教程:https://www.bilibili.com/video/BV18i421i7Dx
1、文件内容:pykde4-devel-4.10.5-6.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/pykde4-devel-4.10.5-6.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
基于Comsol模拟的三层顶板随机裂隙浆液扩散模型:考虑重力影响的瞬态扩散规律分析,Comsol模拟,考虑三层顶板包含随机裂隙的浆液扩散模型,考虑浆液重力的影响,模型采用的DFN插件建立随机裂隙,采用达西定律模块中的储水模型为控制方程,分析不同注浆压力条件下的浆液扩散规律,建立瞬态模型 ,Comsol模拟; 随机裂隙浆液扩散模型; 浆液重力影响; DFN插件; 达西定律模块储水模型; 注浆压力条件; 浆液扩散规律; 瞬态模型,Comsol浆液扩散模型:随机裂隙下考虑重力的瞬态扩散分析