Obtenir le chemin de la ressource Android

ma question Est: est-il possible d'obtenir le chemin absolu d'une ressource (dans un sous-répertoire du dossier res/) dans Android?

la plupart des réponses que je vois à cette question sur google suggèrent d'obtenir un descripteur de fichier, ce qui implique que ce n'est pas possible.

C'est ça?

EDIT: la raison pour laquelle je veux faire cela est parce que j'écris des cours qui acceptent un chemin vers les médias et le lire. Les tests seraient plus faciles si je pouvais passer le chemin absolu d'une ressource.

34
demandé sur jww 2011-06-10 06:52:55

3 réponses

utilisez les chemins URI au lieu du chemin "absolu", voir ce post

Uri path = Uri.parse("android.resource://com.segf4ult.test/" + R.drawable.icon);
Uri otherPath = Uri.parse("android.resource://com.segf4ult.test/drawable/icon");

Ou l'utilisation openRawResource(R. id) pour ouvrir un inputStream, et de l'utiliser de la même manière que vous le feriez utiliser un FileInputStream (readonly)

31
répondu HPP 2017-05-23 12:10:12

impossible. Le dossier ressource que vous voyez est compilé dans l'apk, et il peut même ne pas être stocké tel quel. (par exemple, ces fichiers XML de mise en page ne sont plus des fichiers xml une fois compilés)

deux solutions / solutions possibles pour votre situation:

  1. Pousser le fichier dont vous avez besoin à un emplacement connu (par exemple /mnt/sdcard/... ) avec des outils sdk
  2. créer un fournisseur de maquette pour votre chargeur multimédia qui accepte des choses à l'état brut ressource plutôt que le chemin, pour votre but de test
13
répondu xandy 2011-06-10 03:01:01

en général, NO . Comme il a été répété plusieurs fois ici, vous devez y accéder à travers les ressources.

cela dit, il ya des façons que vous pouvez travailler autour de cela:

  • copier les fichiers de res/assets dans le stockage interne à la première exécution.
  • utiliser adb pour pousser les fichiers à tout endroit public, comme la carte sdcard (notez, il est déconseillé d'utiliser des chemins absolus là - bas, car pas chaque périphérique peut monter les disques au même endroit)
  • utilisez un téléphone à racines et accédez à n'importe quel dossier, p.ex. /data/data/yourapp/ ou /tmp/

dans tous les cas, vous testez contre une solution qui ne fonctionnera probablement pas dans la plupart des appareils. Je vous suggère de suivre les instructions du guide dev: http://developer.android.com/guide/topics/data/data-storage.html

6
répondu Aleadam 2011-06-10 03:04:17