Я работаю над приложением для Android с несколькими другими людьми, и основное содержание указано нашими разработчиками как текстовые файлы в определенном формате файла, который мы затем анализируем, обрабатываем и служим в приложении. Мы в настоящее время храним их в res/raw
.
Это делает вещи большими для разработчиков, потому что, когда они хотят добавить содержание, они просто добавляют файл к res/raw
. Это является раздражающим как разработчик, однако, так как мы разработчики затем должны добавить R.raw.the_new_file
к массиву в коде, указывающем, который файлы обработать при запуске.
Есть ли способ получить доступ к идентификатору ресурса res/raw
программно? Идеально, когда приложение запускается, мы могли позвонить для наблюдения, в котором находятся файлы res/raw
, обработайте всех их, таким образом, мы могли устранить маленькие издержки с совпадением содержания res/raw
с тем из нашего массива в коде.
Самый многообещающий путь, который я видел, getAssets
от Ресурсов, которые позволили бы мне звонить list(String)
на AssetManager, но я испытал затруднения, заставив это работать, тем более, что Вы не можете непосредственно звонить "res/raw"
как Ваш filepath (или по крайней мере, это не работало, когда я попробовал.
Вы можете использовать отражение.
ArrayList<Integer> list = new ArrayList<Integer>();
Field[] fields = R.raw.class.getFields();
for(Field f : fields)
try {
list.add(f.getInt(null));
} catch (IllegalArgumentException e) {
} catch (IllegalAccessException e) { }
После этого список содержит все идентификаторы ресурсов в папке res/raw. Если вам нужно имя ресурса... f.getName() возвращает его.
Вы могли бы использовать
Context.getResources().getIdentifier("filename", "raw", "packagename");
для получения соответствующего идентификатора. однако я не понимаю, почему вы реализуете ваше решение так сложно? какие преимущества для дизайнера? почему они просто не кладут файлы в папку drawable?