web-dev-qa-db-fra.com

Obtenir le chemin de Android

Ma question est: est-il possible d'obtenir le chemin absolu d'une ressource (dans un sous-répertoire du dossier res /) sous 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 le faire est parce que j'écris des cours qui acceptent un chemin vers les médias et le jouent. Les tests seraient beaucoup plus faciles si je pouvais passer le chemin absolu d'une ressource.

36
Prime

Utilisez les chemins URI au lieu du chemin "absolu", voir ce message

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

Ou utilisez openRawResource (R.id) pour ouvrir un inputStream, et utilisez-le de la même manière que vous utiliseriez un FileInputStream (en lecture seule)

32
HPP

Pas possible. Le dossier de ressources 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 qu'ils sont compilés)

Deux solutions/contournements possibles pour votre situation:

  1. Poussez le fichier dont vous avez besoin vers un emplacement connu (comme/mnt/sdcard/...) avec les outils sdk
  2. Créez un fournisseur de maquette pour votre chargeur de médias qui accepte des éléments dans les ressources brutes plutôt que dans le chemin, à des fins de test
13
xandy

En général, [~ # ~] non [~ # ~] . Comme cela a été répété plusieurs fois ici, vous devez y accéder via les ressources.

Cela dit, il existe des moyens de contourner ce problème:

  • copiez les fichiers de res/assets vers le stockage interne lors de la première exécution.
  • utilisez adb pour pousser les fichiers vers n'importe quel emplacement public, tel que la carte SD (notez qu'il est également déconseillé d'y utiliser des chemins absolus, car tous les périphériques ne peuvent pas monter les lecteurs au même emplacement)
  • utilisez un téléphone rooté et accédez à n'importe quel dossier, par exemple /data/data/yourapp/ ou /tmp/

Dans tous les cas, vous testeriez une solution qui ne fonctionnera probablement pas sur la plupart des appareils. Je vous suggère de suivre les instructions du guide de développement: http://developer.Android.com/guide/topics/data/data-storage.html

6
Aleadam