【发布时间】:2015-01-23 07:23:58
【问题描述】:
我可以使用 Android 铃声管理器播放资产中存在的铃声吗?我知道我可以通过以下方式使用复制到 Res 文件夹中的音调:
Uri inAppsoundUri = Uri.parse("android.resource://"
+ mAppContext.getPackageName() + "/raw/" + tone);**
ringTone = RingtoneManager.getRingtone(mAppContext,
inAppsoundUri);**
ringTone.play();
但是当我尝试在 inAppsoundUri 中将 /raw/ 替换为 /assets/ 时,会导致错误。实际上,我还想将音调复制到 Sdcard 以用于某些特定于应用程序的用途,为此我必须将这些音调文件保存在资产中,而且有时我必须通过铃声管理器播放它,为此我必须在 Res 中复制相同的文件/原始文件夹。因此,apk 中存在不必要的 2 个相同音调文件的副本,这会导致 apk 大小变大。那么您能否建议任何方法从同一个地方执行这两个功能(即复制到 sdcard 并使用 Android Ringtone mnager 播放)?
【问题讨论】:
-
你能发布错误日志吗?
-
即使文件在 res/raw 中,您也可以将它们复制到外部存储器。打开一个输入流。进一步的代码,例如从资产复制到 sdcard。
-
@haresh: 用资产替换 /raw/ 后出现此异常 无法打开文件 'android.resource://package_name/assets/Tone/tonee_file'。 (无此文件或目录)。但我已经验证了在提到的文件夹中有相同的文件。
-
我收到“无法打开文件”错误。 @greenapps:这看起来是一个不错的选择,我可以避免额外的复制,谢谢。在您提到的链接中,音频是通过媒体播放器而不是铃声管理器播放的。但我不能使用媒体播放器,因为如果连接了耳机,那么音调是通过耳机而不是通过扬声器发送的,但我总是想通过扬声器播放音调。