【问题标题】:Android player raising exception prepare failed:status 0x1Android 播放器引发异常准备失败:状态 0x1
【发布时间】:2013-08-28 19:18:29
【问题描述】:

我正在尝试播放 res/raw 文件夹中的音频文件。
但收到错误
准备失败:状态 = 0x1

我的代码:

package com.example.lvm;

import java.io.IOException;

import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity {
Button introAudio;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
                introAudio=(Button)findViewById(R.id.introAudio);
                introAudio.setOnClickListener(new OnClickListener() {

                        @Override
                        public void onClick(View arg0) {
                                MediaPlayer mp = new MediaPlayer();
                                String name = "greeting";
                                 mp.setOnCompletionListener(new OnCompletionListener() {

                                        @Override
                                        public void onCompletion(MediaPlayer mp) {
                                            mp.release();
                                        }

                                    });

                                try {
                                     mp.setDataSource("android.resource://com.example.lvm/raw/"+name);
                                         mp.prepare();
                                         mp.start();
                                } catch (Exception e) {
                                         Toast.makeText(MainActivity.this, e.getMessage(), Toast.LENGTH_LONG).show();
                                }
                        }
                });
        }

        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
                // Inflate the menu; this adds items to the action bar if it is present.
                getMenuInflater().inflate(R.menu.activity_main, menu);
                return true;
        }

}

【问题讨论】:

  • 我也有同样的问题。但是在我的情况下,我下载文件并存储它。文件在我调用准备之前就存在,所有其他流都已关闭。如果我稍后调用 prepare 它不会引发异常。不知道是什么问题,但还没有找到解决办法。文件名只是 guid
  • 像往常一样,我一分享我的评论就找到了解决方案。首先,我检查了 DDMS 中的日志以查看有关错误的任何其他信息。我在异常Failed to open file 'audio/2f32a5de.mp4'. (No such file or directory) 之前发现了该错误。之后我发现在一种特定情况下我没有正确创建完整路径:)

标签: android android-resources


【解决方案1】:
prepare failed:status 0x1

由于文件路径错误或目录不正确或找到 Url 或 Uri 而发生。

尝试在您的代码中进行以下操作。

 mediaplayer.setDataSource(MainActivity.this, Uri.parse("android.resource://com.example.lvm/raw/"+name)); 
 //do not add any extension to name, eg. `R.raw.your_raw_file` 

代替

mp.setDataSource("android.resource://com.example.lvm/raw/"+name);

【讨论】:

  • 我做到了。现在没有出现任何异常,但我听不到这出戏。
  • 确保文件没有损坏,请尝试使用另一个文件。我现在没有看到任何问题。
  • 感谢您的建议,我不得不修改我的代码,但您的建议对我有用 :)
【解决方案2】:

首先,检查文件的名称。它不能包含大写字母和特殊字符。删除该文件,更改名称并再次将其复制到环境中。然后在Eclipse中使用Project => Clean函数(应该重新生成R.java)。您也可以尝试使用mp.setDataSource("android.resource://com.example.lvm/raw/"+name); 而不是mediaplayer.setDataSrouce(MainActivity.this, Uri.parse("android.resource://com.example.lvm/raw/"+name)); 请记住不要在名称中添加任何扩展名,例如。 R.raw.your_raw_file

【讨论】:

    【解决方案3】:

    似乎创建 31 个准备好的 MediaPlayer 是最大值。当您尝试创建第 32 个并调用 prepare 时将失败并出现此错误。

    如果是这种情况,如何解决:

    1. 在无用的MediaPlayer上调用release
    2. 限制您可以创建的MediaPlayer 数量。例如,如果您使用队列,请尝试 ArrayBlockingQueue<T>
    3. 捕捉IOException e,检查"Prepare failed.: status=0x1".equals(e.getMessage()),如果是则重试。

    【讨论】:

    • 好吧,我的意思是第 32 名。 :P
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-03
    相关资源
    最近更新 更多