我应该首先给出一些背景知识。我们即将发布一款针对Android平台的非盈利html5儿童游戏。我用eclipse创建了一个apk文件,但是没有音频(游戏的其余部分工作正常)。我尝试过手机间隙,但游戏没有音频。经过几天的研究和可能的解决方案,我决定在这里询问stackoverflow。
游戏使用html / css / js。
Eclipse中的项目文件夹结构是: assets(android_assets) - > www-> index.html,game.xml,js文件夹(游戏引擎),样式文件夹和资源文件夹。 子资产文件夹包含 - >音乐文件夹,图像文件夹和背景文件夹
错误讯息:
index.html文件加载game.xml。 game.xml文件加载assets文件夹中的所有文件。但是,在logcat中找不到所有音乐文件:
无法打开文件&#39; /android_asset/www/assets/music/song.mp3。&#39; (没有相应的文件和目录)。我的xml文件声音调用是:<source href="assets/music/song.mp3" type="mp3" />
我使用相同的参考结构与当前正常加载的图像和背景。从www.oursever.com/song.mp3等外部网址加载音乐时。当在Android设备上作为apk文件运行时,该游戏能够正常播放该歌曲。所以代码是正确的,但apk文件中歌曲的本地文件路径是错误的。
经过多次阅读后,我了解到资源文件夹已被压缩,建议不要解压缩该文件夹中的音频文件。另一种方法是将mp3文件放在res / raw文件夹中。我将我的xml更改为:&#39;&#39;。但是,我收到有关未找到文件的相同错误。我知道res文件夹中的项目使用标识符。但我不确定我应该在xml源文件路径中添加什么来引用res / raw中的歌曲。我使用以下代码打印出歌曲的文件路径:System.out.println("Raw Path: " + getString(R.raw.menu));
我尝试的另一种方法是将整个应用程序推送到SDCard。我仍然收到&#34;找不到文件&#34;错误。
申请权限:
- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
- <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
- <uses-permission android:name="android.permission.INTERNET"/>
- <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
摘要
该游戏在我们的本地网络服务器上运行良好,包含所有资产。当尝试使用Eclipse创建apk文件时,Phonegap选项会生成没有音频的游戏。我读到assets文件夹的每个文件限制为1 MB,这是我尝试使用res / raw文件夹的另一个原因。阻止我们发布这个非盈利儿童游戏的唯一问题是我无法找到apk文件中音乐文件所在的位置。我已经探索了apk文件的内容,它显示了song.mp3在res / raw /文件夹中。然而,Android SDK没有声明。有没有人有任何想法?
非常感谢你,
这是我第一次在这里发帖,所以如果有什么问题让我知道。
更新1 我尝试通过尝试从SD卡读取歌曲尝试了另一种想法,当我尝试这个时,我收到了一个权限被拒绝错误(所以它确实找到了该文件)。即使我设置了READ_EXTERNAL_STORAGE权限,我的应用也被拒绝使用mp3文件。所以我尝试从原始目录复制歌曲,在SD卡上创建一个新文件夹,然后使用以下链接将文件放在新文件夹中: How to Copy Raw files into SD Card
使用此解决方案时,永远不会创建文件夹,也不会复制文件。安装到手机后我也找不到我的应用程序。我检查了内部存储 - > sdcard文件夹并检查了com文件夹。我还检查了com.mycompany文件夹的外部存储 - &gt; sdcard,而不是它们。我们的测试手机运行的是Android 4.1.2。
更新2 我尝试了示例项目的建议&#39;&#39;。我收到错误无法打开文件&#39; android.resource://com.mycompany/raw/song.mp3'。 (没有相应的文件和目录)。 Song.mp3位于res / raw文件夹中。我尝试通过尝试从SD卡读取歌曲尝试了另一种想法,当我尝试这个时,我收到了一个权限被拒绝错误(所以它确实找到了该文件)。即使我设置了READ_EXTERNAL_STORAGE权限。
更新3 我从头开始再次处理一个空白项目。我用于上一个项目的教程是:https://www.youtube.com/watch?v=QRa4yMjoI7c 我将在下周一更新这篇文章,感谢Andrew和其他任何至少看过这篇文章的人。
更新4 我已经在这里上传了一个示例项目: http://tinyurl.com/p7s5w2v 转到文件然后下载。 该项目非常小,但您可以看到我将menu.mp3文件放在raw / res目录中,并且&#39; android.resource://com.mycompany/raw/menu.mp3'在&#39; fisher.xml&#39;中调用时无法找到该歌曲。这首歌在我们的网络服务器和本地服务器上正常播放。但是在Android设备或模拟器上运行时找不到menu.mp3。我总是可以告诉xml文件从我们的网络服务器加载游戏的所有音频文件,但这将很慢。
更新5 当前尝试:
source href="android.resource://com.brg.example/raw/menu" file not found
source href="sdcard/menu.mp3" permission denied on sdcard (app has read access)
source href="storage/sdcard0/menu.mp3" permission denied
source href="file:///assets/music/menu.mp3" file not found
清单文件:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.brg.example"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="16"
android:targetSdkVersion="19" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.brg.example.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
更新6 我决定使用url从远程服务器加载媒体文件。我最初认为将html项目转换为带有音频的android webview比其他平台更省时。我错了。我们将来可能会重新访问Android。我们付费后,PhoneGap支持团队基本保持沉默。我感谢所有决定浏览这篇文章的人。
答案 0 :(得分:0)
试试这个:“android.resource://com.your.package/raw/filename”
答案 1 :(得分:0)
我刚遇到类似的问题 - 对我而言,关键部分是省略了媒体文件的扩展名:android.resource://com.mycompany/raw/song