webdevqa.jp.net

adbでsdcardディレクトリを取得

私は、adbによってデバイスsdcardからファイル(Android app)によって保存された)をプルするアプリケーションを作成しています。問題は、デバイスごとにさまざまなsdcardディレクトリがあることです

すなわち:

  • sDカード
  • sdcard/external_sd

まず、私は次のソリューションを発明しました:

  1. adb Shellを実行します
  2. ls
  3. Dir "sdcard"が存在するかどうかを確認します
  4. はいの場合、sdcard/lsを実行し、external_sdが存在するかどうかを確認します
  5. 戻り値。

しかし問題は、2つのサムスンデバイス_GT-I9100_と_GT-I9000_があり、両方ともディレクトリ_sdcard/external_sd_を持っていることです。 System.getenv("EXTERNAL_STORAGE")をチェックすると、1つはsdcardを返し、もう1つは_sdcard/external_sd_を返します。以前にSystem.getenv("EXTERNAL_STORAGE")に保存されたファイルをプルする必要があります。

だから質問は次のとおりです:Androidコードにアクセスせずに、adbから直接sdcardディレクトリを取得するコマンドはありますか?

または、adbのam startでアクティビティを開始し、戻り値を取得できますか?これは可能ですか?

編集:解決策を見つけました:

_adb Shell echo $EXTERNAL_STORAGE
_
25
Paweł

私があなたを誤解していないなら、あなたは次のようなものを探しています:

[email protected]:~$ adb Shell cd \$EXTERNAL_STORAGE
[email protected]:~$ adb Shell ls \$EXTERNAL_STORAGE
[email protected]:~$ adb Shell echo \$EXTERNAL_STORAGE
27
Blackbelt

その価値-$ EXTERNAL_STORAGE変数を使用すると、誤解を招く結果が得られる可能性があります。ここにはHP Slateタブレットがあり、EXTERNAL_STORAGE変数が/ storage/sdcard0に設定されています。ただし、シェルでdf(ディスク空き)コマンドを使用する場合、またはマウントコマンドを使用して空き領域またはマウントを表示する場合、次のことが明らかになります。

[email protected]:/ $ df
Filesystem             Size   Used   Free   Blksize
/dev                  452.7M  36.0K  452.7M   4096
/mnt/asec             452.7M  0.0 K  452.7M   4096
/mnt/obb              452.7M  0.0 K  452.7M   4096
/system               629.9M  468.5M  161.5M   4096
/data                 5.7 G  2.3 G  3.5 G   4096
/cache                435.9M  16.4M  419.5M   4096
/storage/sdcard0      5.7 G  2.3 G  3.5 G   4096
/mnt/external_sd      29.3G  64.0K  29.3G   32768

そのため、外部SDカードは、実際にはEXTERNAL_STORAGEが返す値(内部ストレージ)ではなく、/ mnt/external_sdです。

22
John Deaux

System.getenv("EXTERNAL_STORAGE")の代わりに getExternalStorageDirectory() を使用することをお勧めします。これにより、デバイスに関係なく外部ストレージディレクトリが提供されます。

0
AndroDev