【问题标题】:Android MP3: java.io.FileNotFoundException: This file can not be opened as a file descriptor; it is probably compressedAndroid MP3: java.io.FileNotFoundException: 该文件不能作为文件描述符打开;它可能被压缩了
【发布时间】:2011-04-14 17:06:22
【问题描述】:

我正在尝试播放自定义声音res/raw/notification.mp3。它约为 91KB。

这是我的代码

MediaPlayer.create(context, R.raw.notification).start();

这是我的错误

04-14 15:57:55.387: ERROR/AndroidRuntime(233): android.content.res.Resources$NotFoundException: File res/raw/notification.mp3 from drawable resource ID #0x7f040000
04-14 15:57:55.387: ERROR/AndroidRuntime(233):     at android.content.res.Resources.openRawResourceFd(Resources.java:860)
04-14 15:57:55.387: ERROR/AndroidRuntime(233):     at android.media.MediaPlayer.create(MediaPlayer.java:641)
04-14 15:57:55.387: ERROR/AndroidRuntime(233):     at mypackage.MyActivity$1.onPostExecute(MyActivity.java:123)
04-14 15:57:55.387: ERROR/AndroidRuntime(233):     at android.os.AsyncTask.finish(AsyncTask.java:417)
04-14 15:57:55.387: ERROR/AndroidRuntime(233):     at android.os.AsyncTask.access$300(AsyncTask.java:127)
04-14 15:57:55.387: ERROR/AndroidRuntime(233):     at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429)
04-14 15:57:55.387: ERROR/AndroidRuntime(233):     at android.os.Handler.dispatchMessage(Handler.java:99)
04-14 15:57:55.387: ERROR/AndroidRuntime(233):     at android.os.Looper.loop(Looper.java:123)
04-14 15:57:55.387: ERROR/AndroidRuntime(233):     at android.app.ActivityThread.main(ActivityThread.java:4627)
04-14 15:57:55.387: ERROR/AndroidRuntime(233):     at java.lang.reflect.Method.invokeNative(Native Method)
04-14 15:57:55.387: ERROR/AndroidRuntime(233):     at java.lang.reflect.Method.invoke(Method.java:521)
04-14 15:57:55.387: ERROR/AndroidRuntime(233):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
04-14 15:57:55.387: ERROR/AndroidRuntime(233):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
04-14 15:57:55.387: ERROR/AndroidRuntime(233):     at dalvik.system.NativeStart.main(Native Method)
04-14 15:57:55.387: ERROR/AndroidRuntime(233): Caused by: java.io.FileNotFoundException: This file can not be opened as a file descriptor; it is probably compressed
04-14 15:57:55.387: ERROR/AndroidRuntime(233):     at android.content.res.AssetManager.openNonAssetFdNative(Native Method)
04-14 15:57:55.387: ERROR/AndroidRuntime(233):     at android.content.res.AssetManager.openNonAssetFd(AssetManager.java:426)
04-14 15:57:55.387: ERROR/AndroidRuntime(233):     at android.content.res.Resources.openRawResourceFd(Resources.java:857)
04-14 15:57:55.387: ERROR/AndroidRuntime(233):     ... 14 more

同样的事情发生在一个不相关的 WAV 文件上,所以它可能不是 MP3 的问题。

可能出了什么问题?我应该解压缩 WAV/MP3 吗?怎么样?

【问题讨论】:

标签: android resources audio


【解决方案1】:

原来是 NetBeans 生成的构建脚本有问题。我从头开始做了一个教程,它在 NetBeans 中失败并在 Eclipse 中工作。我想我最终会学习 Eclipse。这是我一直想做的事情,至少作为比较,希望它会少一些错误,但我没有时间。好吧,现在需要给我时间。

【讨论】:

    【解决方案2】:

    你为上下文值传递了什么?上下文用于知道在哪里查找资源文件。看起来您可能在 AsyncTask 中调用了它?您是否使用getApplicationContext() 来获得参考?例如,如果这段代码在一个 Activity 中,你可以这样调用这个方法:

    MediaPlayer.create(this, R.raw.notification).start();
    

    如果没有,您需要传递映射到您的应用程序包的适当上下文。

    另一种可能是您的 R.java 已过时。确保您的 XML 文件没有任何错误导致 aapt 无法重建资源,并且可能对项目运行清理。

    您可以尝试的另一件事是将 MP3 文件放入资产目录并尝试以这种方式加载声音。对于位于assets/notification.mp3 的文件:

    MediaPlayer mp = new MediaPlayer();
    AssetFileDescriptor afd = getAssets().openFd("notification.mp3");
    mp.setDataSource(afd.getFileDescriptor());
    afd.close();
    mp.prepare();
    mp.start();
    

    首先在 Activity 中尝试此操作,因为需要从上下文中调用 getAssets()。这种方法可以规避资源包中可能出现的问题,并且可以更好地确定真正的罪魁祸首。

    希望有帮助!

    【讨论】:

    • a) 我尝试将代码行放在ActivityonResume 中,使用this 代替context。我还尝试了new ASyncTask 中的代码行,该代码行是在BroadcastReceiveronReceive(final Context context, Intent intent) 方法中创建的,在这种情况下,onReceive 参数context 是最终的并用于ASyncTask 的匿名子类.两种方式都失败并出现相同的错误。 . b)(在 NetBeans IDE 中)我刚刚进行了清理,清空了 R.java,清理/构建(重建 R.java),另一个(浪费的)清理/构建然后运行,但它仍然失败同样的错误。
    • 不相关的 WAV 文件也会发生同样的事情,所以这可能不是 MP3 的问题
    • 更新了使用资产目录作为另一个测试的方法。
    猜你喜欢
    • 2011-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多