【发布时间】:2020-10-29 20:37:05
【问题描述】:
假设我在原始文件夹中有 100 个 .mp3 文件
对于单个已知文件可以读取的文件可以使用getResources().openRawResource(R.raw.myfilename)
但我想获取原始文件夹中的所有文件名,然后从该列表中随机选择一个
有什么帮助吗?
【问题讨论】:
标签: android android-mediaplayer directory
假设我在原始文件夹中有 100 个 .mp3 文件
对于单个已知文件可以读取的文件可以使用getResources().openRawResource(R.raw.myfilename)
但我想获取原始文件夹中的所有文件名,然后从该列表中随机选择一个
有什么帮助吗?
【问题讨论】:
标签: android android-mediaplayer directory
public void listRaw(){
Field[] fields=R.raw.class.getFields();
for(int count=0; count < fields.length; count++){
Log.i("Raw Asset: ", fields[count].getName());
}
}
由于实际文件一旦在手机上就不仅仅位于文件系统上,因此名称无关紧要,您需要通过分配给该资源名称的整数来引用它们。在上面的例子中,你可以得到这个整数:
int resourceID=fields[count].getInt(fields[count]);
这与您通过引用 R.raw.whateveryounamedtheresource 得到的 int 相同
【讨论】:
为了完整起见,在 Kotlin 中也是这样:
package com.kana_tutor.KanaCard
import android.util.Log
import java.lang.reflect.Field
fun listRaw() {
val fields: Array<Field> =
com.kana_tutor.KanaCard.R.raw::class.java.getFields()
fields.forEach {field ->
Log.d("Knames", String.format(
"name=\"%s\", id=0x%08x",
field.name, field.getInt(field))
)
}
}
【讨论】:
补充@EminemT 所说的,R.raw.class.getFields() 似乎提供了 android 使用的内部文件。要获取您放入 res/raw 中的文件,请改用 R.raw.class.getDeclaredFields()。
【讨论】: