我有一个用户(Samsung Galaxy S5,Android 4.4)报告的崩溃,我不明白发生了什么。这似乎是可以吸收的,但也许有些人遇到了同样的问题,或类似的问题。MediaPlayer.setDataSource中的java.lang.IllegalStateException,使用铃声类

这里是跟踪:

java.lang.RuntimeException: An error occured while executing doInBackground()

at android.os.AsyncTask$3.done(AsyncTask.java:300)

at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)

at java.util.concurrent.FutureTask.setException(FutureTask.java:222)

at java.util.concurrent.FutureTask.run(FutureTask.java:242)

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)

at java.lang.Thread.run(Thread.java:841)

Caused by: java.lang.IllegalStateException

at android.media.MediaPlayer._setDataSource(Native Method)

at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1383)

at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1367)

at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1302)

at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1240)

at android.media.MediaPlayer.setDataSource(MediaPlayer.java:986)

at android.media.MediaPlayer.setDataSource(MediaPlayer.java:951)

at android.media.Ringtone.setUri(Ringtone.java:219)

at android.media.Ringtone.setStreamType(Ringtone.java:89)

at com.aasfet.clocklight.WakeActivity$RingAsyncTask.doInBackground(WakeActivity.java:510)

at com.aasfet.clocklight.WakeActivity$RingAsyncTask.doInBackground(WakeActivity.java:1)

at android.os.AsyncTask$2.call(AsyncTask.java:288)

at java.util.concurrent.FutureTask.run(FutureTask.java:237)

... 3 more

这里是我的代码的一部分是在错误:

private class RingAsyncTask extends AsyncTask {

@Override

protected Integer doInBackground(Integer... params) {

int previousVolume = audioManager.getStreamVolume(AudioManager.STREAM_ALARM);

int maxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_ALARM);

int newVolume = (int)(volume * (float)maxVolume);

if(newVolume < 1){

newVolume = 1;

}

if(progressive){

audioManager.setStreamVolume(AudioManager.STREAM_ALARM, 1, 0);

}else{

audioManager.setStreamVolume(AudioManager.STREAM_ALARM, newVolume, 0);

}

getRingtone().setStreamType(AudioManager.STREAM_ALARM);

getRingtone().play();

...

getRingtone()是我的功能之一,并返回一个铃声对象是在活动的onResume中使用RingtoneManager光标获得的,我认为那里没有任何问题。

在Android源代码中,Ringtone.setStreamType调用Ringtone.setURI。这里是setURI:

public void setUri(Uri uri) {

168 destroyLocalPlayer();

169

170 mUri = uri;

171 if (mUri == null) {

172 return;

173 }

174

175 // TODO: detect READ_EXTERNAL and specific content provider case, instead of relying on throwing

176

177 // try opening uri locally before delegating to remote player

178 mLocalPlayer = new MediaPlayer();

179 try {

180 mLocalPlayer.setDataSource(mContext, mUri);

181 mLocalPlayer.setAudioStreamType(mStreamType);

182 mLocalPlayer.prepare();

...

所以,setURI创建一个新的MediaPlayer,然后调用MediaPlayer上的setDataSource。 android doc告诉我们,使用新的MediaPlayer()将其设置为“空闲”状态,而“空闲”状态是调用setDataSource的正确状态。 我真的不明白如何,显然有一次在一千,我得到这个错误。我无法联系有错误的用户,从未在我的终端上复制它,所以我发现自己被阻止。 我正在考虑在我的代码中捕获错误,当它发生时,请使用我的Ringtone.setStreamType再次尝试,因为系统的瞬态“状态”可能会在几毫秒后改变。总之我很绝望:)

任何帮助或相似的经历,将不胜感激:)

2014-10-17

jtag

+1

错误来自您身边的媒体播放器无法获得正确格式的来源。你是否支持你的代码中的所有格式。 –

2014-10-17 08:52:22

+0

什么是destroyLocalPlayer();? 以上评论可能是正确的,检查支持的格式,由于您的操作系统版本.http://developer.android.com/guide/appendix/media-formats.html 也尝试调试您的URL,硬编码和尝试与它 –

2014-10-17 09:23:04

+0

谢谢therealprashant和Hunkeone,我会试着朝这个方向努力,但对于我来说,数据源格式的问题导致出现IllegalStateException错误而不是IOException等并不合逻辑。 –

2014-10-17 11:23:52

java铃声类_MediaPlayer.setDataSource中的java.lang.IllegalStateException,使用铃声类相关推荐

  1. java 中random类使用_Java中的天使和魔鬼:Unsafe类

    我们在看ConcurrentHashMap源码时经常看到Unsafe类的使用,今天我们来了解下Unsafe类. Java是一个安全的编程语言,它能最大程度的防止程序员犯一些低级的错误(大部分是和内存管 ...

  2. java 构造函数 单例_Java中的私有构造函数和单例类 - Break易站

    Java 构造函数 Java中的私有构造函数和单例类 我们首先分析下面的问题: 我们可以有私人构造函数吗? 正如你可以很容易猜到的,就像我们可以为构造函数提供访问说明符一样.如果它是私人的,那么它只能 ...

  3. jython 导入java包_在jython中导入java类

    我用python处理NLP.有一个NLP工具,即Zemberek,用于土耳其语.但它是用java编写的.所以我必须使用jython来导入这些类.我安装了Jython2.7.另外,我安装了eclipse ...

  4. Java Native Interface 二 JNI中对Java基本类型和引用类型的处理

    本文是<The Java Native Interface Programmer's Guide and Specification>读书笔记 Java编程里会使用到两种类型:基本类型(如 ...

  5. 微信信息回复 java,微信公众平台开发中使用Java如何实现一个消息回复功能

    微信公众平台开发中使用Java如何实现一个消息回复功能 发布时间:2020-11-17 16:11:11 来源:亿速云 阅读:82 作者:Leah 本篇文章给大家分享的是有关微信公众平台开发中使用Ja ...

  6. 修改docker内java内存_在docker中使用java的内存情况

    Java和Docker不是天然的朋友. Docker可以设置内存和CPU限制,而Java不能自动检测到.使用Java的Xmx标识(繁琐/重复)或新的实验性JVM标识,我们可以解决这个问题. 虚拟化中的 ...

  7. java oca_OCA第7部分中的Java难题

    java oca 在OCA系列的Java Puzzlers的这一部分中,我将展示定义字符串和与之相关的潜在惊喜的多种方法. 创建字符串的两种基本类型是使用new关键字和仅使用字符串文字来创建. Str ...

  8. java解析shell命令_Android中执行java命令的方法及java代码执行并解析shell命令

    这篇文章给大家介绍Android中执行java命令的方法及java代码执行并解析shell命令,需要的朋友一起学习 android中执行java命令的方法大家都晓得吗,下面一段内容给大家带来了具体解析 ...

  9. js 中 java 代码_在js中嵌套java代码

    jsp中有时候在js中操作某些java后台传递过来的数据逻辑比较复杂,比如list内容的遍历,可以直接在页面上添加java脚本来执行内容,代码如下: //在js中插入java代码操作 //取出java ...

最新文章

  1. ORACLE 12C PDB部分功能测试
  2. linux统计文件的个数
  3. 多个不同的app应用间应该如何进行消息推送呢?
  4. 【Win32API】SendInput ERROR_BUSY 错误原因
  5. WordPress在Permalink取消index.php后nginx404的解决方案
  6. python画图三维-Python使用matplotlib绘制三维图形示例
  7. ubuntu下网页显示乱码的解决方法
  8. Hyperledger Fabric 核心模块(6)configtxlator工具
  9. KMP 深度讲解next数组的求解
  10. 【linux】Linux配置环境变量
  11. 安装linux系统过程中值得记录的内容
  12. 简单三步,使用 Docker 搭建一个多端同步网盘!
  13. YUM命令常见报错以及解决办法
  14. win10 查看系统开机历史记录
  15. Atitit 搜集热点,热门文章的整理 attilax 最近
  16. arcengine中测量两个geometry的距离
  17. 同一个WiFi,电脑不能访问CSDN网站,手机却可以,换一个网络电脑就可以是什么原因?
  18. Windows Server 2019 Datacenter x64 安装 SHARP AR-2048N 打印机驱动
  19. 关于学习Godot时遇到的问题(未解决)
  20. 实对称矩阵必可正交相似对角化

热门文章

  1. CRM软件设计评测点与采集测评点
  2. saltstack部署java应用失败无日志——CICD 部署
  3. Android之Junit测试类
  4. Android 多线程实现异步执行demo,线程池使用demo
  5. centos 安装pm2
  6. mysql开启布隆过滤器_海量数据去重之布隆过滤器
  7. 鼠标问题:鼠标拖拽不灵敏,准备复制拖动的半截就断了
  8. 【C++深度剖析教程4】C++的二阶构造模式
  9. 吞吐量(TPS)、QPS、并发数、响应时间(RT)
  10. hadoop中map和reduce的数量设置问题