【发布时间】:2019-02-12 00:58:48
【问题描述】:
我已经开始开发一个 Android 应用程序,对此我很陌生。 我的应用程序必须读取一些二维码,目前我正在使用 zxing 库。 现在我在应用程序的一部分中遇到了一些问题,涉及播放存储在 /res/raw 中的声音:
我的代码有时会运行......但大多数时候它不会运行
我可以使用以下代码访问原始文件夹中的一些声音文件:
var myPlayer = MediaPlayer.create(this, R.raw.filename)
但不通过变量调用我需要的文件:
var myVarWithFilenameInside: String = "filename"
var myFileInt: Int = resources.getIdentifier("$myVarWithFilenameInside", "raw", this.getPackageName())
var myPlayer = MediaPlayer.create(this, myFileInt)
(即使显然是“随机”的,这似乎偶尔也会起作用;确实很奇怪..)
我已经尝试不指定变量的类型并插入 packageName(如 IDE 所建议的那样)而不是 this.getPackageName()...但是似乎没有任何效果
PS。 该指令也可以完美运行,但是我必须再次获取标识符而不使用变量,而是手动将其放入方法中
var myFileInt: Int = resources.getIdentifier("filename", "raw", this.getPackageName())
var myPlayer = MediaPlayer.create(this, myFileInt)
我对此非常困惑...因此,我们将不胜感激任何形式的帮助 提前致谢
【问题讨论】:
-
程序化是什么意思?两者都是程序化的。您不能对任何随机文件名或路径使用第二种方法。如果有文件不在应用的原始文件夹中,则需要使用 DocumentsProvider。
-
我的意思是在工作案例中,我必须设置一个长长的 if 语句列表,以便如果一个字符串包含想要的文件(它们都在 /Res/raw 中),那么它会触发正确的语句文件名明确。
-
但是我需要将选择的文件名存储到一个var中,获取标识符然后创建一个指向我需要的文件的媒体播放器对象。
-
我不知道为什么如果我通过文件名调用同一个文件会被正确寻址(参见主帖),但如果我尝试调用它,它会给我一个 IOException of file not found使用变量。
-
我更新了问题以使其更清晰
标签: java android android-studio kotlin resources