wake-up-neo.com

Holen Sie sich den Pfad der Android Ressource

Meine Frage ist: ist es möglich, den absoluten Pfad einer Ressource (in einem Unterverzeichnis des res/-Ordners) in Android zu erhalten?

Die meisten Antworten, die ich auf diese Frage bei Google sehe, schlagen vor, einen Dateideskriptor zu erhalten, was impliziert, dass dies nicht möglich ist.

Ist es?

BEARBEITEN: Der Grund, warum ich dies tun möchte, ist, dass ich Kurse schreibe, die einen Pfad zu Medien akzeptieren und abspielen. Das Testen wäre viel einfacher, wenn ich den absoluten Pfad einer Ressource übergeben könnte.

36
Prime

Verwenden Sie URI-Pfade anstelle von "absoluten" Pfaden, siehe dieser Beitrag

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

Oder verwenden Sie openRawResource (R.id), um einen inputStream zu öffnen, und verwenden Sie ihn genauso, wie Sie einen FileInputStream verwenden würden (schreibgeschützt).

32
HPP

Nicht möglich. Der angezeigte Ressourcenordner wird in das Apk kompiliert und möglicherweise nicht einmal so gespeichert, wie er ist. (z. B. sind diese Layout-XML-Dateien nach dem Kompilieren keine XML-Dateien mehr)

Zwei mögliche Lösungen/Umgehungsmöglichkeiten für Ihre Situation:

  1. Verschieben Sie die benötigte Datei mit den SDK-Tools an einen bekannten Speicherort (z. B./mnt/sdcard/...)
  2. Erstellen Sie einen Mockup-Anbieter für Ihren Media Loader, der zu Testzwecken Inhalte in einer unformatierten Ressource und nicht in einem Pfad akzeptiert
13
xandy

Im Allgemeinen [~ # ~] nein [~ # ~] . Da es hier mehrmals wiederholt wurde, müssen Sie über die Ressourcen darauf zugreifen.

Das heißt, es gibt Möglichkeiten, wie Sie das umgehen können:

  • kopieren Sie die Dateien beim ersten Start von res/assets in den internen Speicher.
  • verwenden Sie adb, um die Dateien an einen öffentlichen Speicherort wie die SD-Karte zu verschieben. (Beachten Sie, dass die Verwendung absoluter Pfade dort nicht empfohlen wird, da möglicherweise nicht jedes Gerät die Laufwerke an demselben Speicherort bereitstellt.)
  • verwenden Sie ein gerootetes Telefon und greifen Sie auf einen beliebigen Ordner zu, z. B. /data/data/yourapp/ oder /tmp/

In jedem Fall würden Sie eine Lösung testen, die auf den meisten Geräten höchstwahrscheinlich nicht funktioniert. Ich empfehle Ihnen, den Anweisungen des Entwicklerhandbuchs zu folgen: http://developer.Android.com/guide/topics/data/data-storage.html

6
Aleadam