web-dev-qa-db-ja.com

Androidリソースのパスを取得

私の質問は、Androidのリソース(res /フォルダーのサブディレクトリ)の絶対パスを取得することは可能ですか?

このグーグルの質問に対する私の答えのほとんどは、ファイル記述子を取得することを示唆しており、これは不可能であることを意味しています。

それは...ですか?

編集:私がこれをしたいのは、メディアへのパスを受け入れて再生するクラスを書いているからです。リソースの絶対パスを渡すことができれば、テストははるかに簡単になります。

36
Prime

「絶対」パスの代わりにURIパスを使用します。 この投稿 を参照してください

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

または、openRawResource(R.id)を使用してinputStreamを開き、FileInputStream(読み取り専用)を使用するのと同じ方法で使用します。

32
HPP

ありえない。表示されるリソースフォルダーはapkにコンパイルされ、そのままでは保存されない場合があります。 (たとえば、これらのレイアウトxmlファイルは、一度コンパイルされるとxmlファイルではなくなります)

状況に応じた2つの可能な解決策/回避策:

  1. SDKツールを使用して、必要なファイルを既知の場所(/ mnt/sdcard/...など)にプッシュします。
  2. テストの目的で、パスではなく生のリソースの内容を受け入れるメディアローダーのモックアッププロバイダーを作成します。
13
xandy

一般的に、[〜#〜] no [〜#〜]。ここでは数回繰り返されたため、リソースを介してアクセスする必要があります。

とはいえ、それを回避する方法はいくつかあります。

  • 最初の実行時にファイルをres/assetsから内部ストレージにコピーします。
  • adbを使用して、sdcardなどのパブリックな場所にファイルをプッシュします(すべてのデバイスが同じ場所にドライブをマウントできるわけではないため、そこに絶対パスを使用することもお勧めしません)
  • ルート化された電話を使用し、任意のフォルダにアクセスします(例:/data/data/yourapp/または/tmp/

いずれにせよ、ほとんどのデバイスで動作しない可能性が最も高いソリューションに対してテストします。開発者ガイドの指示に従うことをお勧めします。 http://developer.Android.com/guide/topics/data/data-storage.html

6
Aleadam