【问题标题】:Get all files in raw folder in android获取android原始文件夹中的所有文件
【发布时间】:2020-10-29 20:37:05
【问题描述】:

假设我在原始文件夹中有 100 个 .mp3 文件

对于单个已知文件可以读取的文件可以使用getResources().openRawResource(R.raw.myfilename)

但我想获取原始文件夹中的所有文件名,然后从该列表中随机选择一个

有什么帮助吗?

【问题讨论】:

标签: android android-mediaplayer directory


【解决方案1】:
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 相同

refer

【讨论】:

  • 为什么如果我使用 buildFlavors 它不起作用。如何解决?有什么想法吗?
【解决方案2】:

为了完整起见,在 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))
        )
    }
}

【讨论】:

    【解决方案3】:

    补充@EminemT 所说的,R.raw.class.getFields() 似乎提供了 android 使用的内部文件。要获取您放入 res/raw 中的文件,请改用 R.raw.class.getDeclaredFields()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多