- 浏览: 11274 次
- 性别:
- 来自: 北京
最新评论
-
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音乐播放器demo”所涵盖的知识点。 首先,Android音乐播放器的核心是媒体播放服务(MediaPlayer)。这是一个系统级的服务,用于处理音频和视频文件的播放。在Android中,MediaPlayer类提供...
在3G技术的迅猛发展中,人们对音乐的追求日益高涨,市场上的音乐播放器虽多,但普遍存在操作复杂或音质不佳等问题,难以满足用户的高品质音乐体验需求。因此,**Android音乐播放器需求分析**旨在开发一款更加人性化...
android简单音乐播放器的播放,暂停,前一首,后一首的控制。简单音乐播放器的播放,暂停,前一首,后一首的控制。简单音乐播放器的播放,暂停,前一首,后一首的控制。简单音乐播放器的播放,暂停,前一首,后一首...
这个“Android音乐播放器源码”提供了一个完整的实现,从用户界面设计到音频处理,涵盖了多个关键知识点。 1. **媒体播放库(MediaPlayer)**:Android系统的MediaPlayer类是音频和视频播放的核心组件。源码中会...
这个"Android音乐播放器demo"项目可能包括了以下重要知识点: 1. **媒体库API**:Android提供了MediaStore类,允许开发者访问设备上的音频文件。通过ContentResolver查询MediaStore.Audio Media URI,可以获取音乐...
Android Studio工程,音乐播放器,实现递归扫描SD根目录歌曲文件,切换播放模式、查看歌曲详细信息等基本功能,相应博文地址http://blog.csdn.net/djstavaV/article/details/47726675
【Android音乐播放器源码解析】 ...以上是基于“android音乐播放器源码”项目的分析,涵盖了Android开发中的多个重要知识点。通过学习和理解这些技术,开发者可以构建出更具有特色的音乐播放应用,提升用户体验。
本案例“android音乐播放器service学习案例”着重讲解如何利用Service来实现一个音乐播放器,使音乐能够在后台持续播放。 首先,我们需要了解Android Service的基础知识。Service分为两种类型:标准服务...
android音乐播放器源码(改进版)。这个版本已经放在了service中,在服务中控制播放音乐,通过BroadcastReceiver传递一些数据,并且实现了在电话打过来时,停止播放音乐,打完电话继续播放。当然还有上一个版本的甩...
在Android应用开发中,设计和使用合适的图标是至关重要的,因为它们不仅提升应用程序的视觉吸引力,还能帮助用户快速识别和理解...在实际应用中,结合Android开发的最佳实践,可以创建出用户体验优秀的音乐播放器应用。
Android 音乐播放器,实现递归扫描SD根目录歌曲文件,切换播放模式、查看歌曲详细信息等基本功能,源码打包给大家,需要的下载哈 参考:http://blog.csdn.net/linmiansheng/article/details/18455593
在本篇毕业论文中,我们将探讨如何开发一个基于Android手机平台的音乐播放器。这个项目旨在为用户提供一个功能完备、用户友好的音乐播放体验。在接下来的章节中,我们将深入研究该系统的各个层面,从需求分析到...
在Android平台上开发一款音乐播放器是一项常见的任务,它涉及到多媒体处理、用户界面设计以及系统服务的集成等多个技术领域。下面将详细阐述如何基于Android实现一个简单的音乐播放器,并结合提供的资源进行讨论。 ...
总的来说,这个“基于Android的简易音乐播放器源码”项目是一个很好的学习起点,它涵盖了Android应用开发的基本流程和关键知识点,包括多媒体处理、UI设计、文件操作以及服务的使用。通过研究这个项目,开发者不仅...
在Android平台上,开发这样一款音乐播放器涉及到多个技术知识点: 1. **媒体播放器(MediaPlayer)API**:Android系统提供了MediaPlayer类,用于播放音频和视频文件。开发者需要熟悉如何初始化MediaPlayer对象,...
【Android实现音乐播放器——课程设计报告,优秀课设】是一个关于移动应用开发的课程设计项目,主要目标是让学生熟练掌握Android程序开发的各种技术,包括基础的UI界面设计、数据存储、Activity、Service、SQLite...
总结来说,创建一个Android Studio音乐播放器项目涉及了Android开发中的多个关键知识点,包括`MediaPlayer`的使用、UI设计、Service的绑定与通信、ListView的实现、SeekBar的控制以及网络下载管理。通过实践这些功能...
本文是关于在Android手机平台上构建音乐播放器的毕业论文,主要涵盖了从项目背景、系统需求分析到具体功能设计和数据库设计等多个方面。以下是对这些内容的详细解释: **第一章 引言** 1.1 项目背景:随着智能手机...
在Android平台上开发一个后台音乐播放器是相当复杂的任务,涉及到多个关键组件和技术。在这个场景中,"android 后台音乐播放器"项目可能是一个实现能够持续播放音乐,即使用户离开应用或者屏幕关闭的解决方案。接...