2017-02-26 7 views
2

私はのためにUSBドライブからファイルを読み込もうとしています。のラブベリーパイのAndroid物アプリ。私はそうのように取り付けられたデバイスのリストをスキャンすることができるよ:次の出力が表示されAndroid ThingsアプリにUSBドライブをマウントするにはどうすればいいですか?

public static List<File> ScanForFiles(Context context){ 
    ArrayList<File> files = new ArrayList<>(); 
    try{ 
     BufferedReader reader = new BufferedReader(new FileReader("/proc/self/mountinfo")); 
     String line; 
     while ((line = reader.readLine()) != null) { 
      String[] columns = line.split(" "); 
      Log.i(TAG, "Mounted: " + columns[4]); 
      //files.addAll(getListFiles(new File(columns[4]))); 
     } 
    } catch (Exception ex){ 
     ex.printStackTrace(); 
    } 

    printFileInformation("/proc/partitions"); 

    return files; 
} 

private static void printFileInformation(String fileName){ 
    Log.i("TitanTV", "Reading contents of " + fileName); 

    try{ 
     BufferedReader reader = new BufferedReader(new FileReader(fileName)); 
     String line; 
     while ((line = reader.readLine()) != null){ 
      Log.i("TitanTV", line); 
     } 
    } catch (Exception ex){ 
     ex.printStackTrace(); 
    } 
} 

 
I: Mounted:/
I: Mounted: /dev 
I: Mounted: /dev 
I: Mounted: /dev/pts 
I: Mounted: /dev/memcg 
I: Mounted: /dev/cpuctl 
I: Mounted: /proc 
I: Mounted: /sys 
I: Mounted: /sys/fs/selinux 
I: Mounted: /sys/fs/pstore 
I: Mounted: /acct 
I: Mounted: /mnt 
I: Mounted: /mnt/runtime/default/emulated 
I: Mounted: /mnt/runtime/read/emulated 
I: Mounted: /mnt/runtime/write/emulated 
I: Mounted: /config 
I: Mounted: /data 
I: Mounted: /oem 
I: Mounted: /gapps 
I: Mounted: /storage 
I: Mounted: /storage/emulated 
I: Mounted: /storage/self 
 
I: Reading contents of /proc/partitions 
I: major minor #blocks name 
I: 1  0  8192 ram0 
I: 1  1  8192 ram1 
I: 1  2  8192 ram2 
I: 1  3  8192 ram3 
I: 1  4  8192 ram4 
I: 1  5  8192 ram5 
I: 1  6  8192 ram6 
I: 1  7  8192 ram7 
I: 1  8  8192 ram8 
I: 1  9  8192 ram9 
I: 1  10  8192 ram10 
I: 1  11  8192 ram11 
I: 1  12  8192 ram12 
I: 1  13  8192 ram13 
I: 1  14  8192 ram14 
I: 1  15  8192 ram15 
I: 179  0 7761920 mmcblk0 
I: 179  1  65536 mmcblk0p1 
I: 179  2  1024 mmcblk0p2 
I: 179  3  1024 mmcblk0p3 
I: 179  4  32768 mmcblk0p4 
I: 179  5  32768 mmcblk0p5 
I: 179  6  524288 mmcblk0p6 
I: 179  7  524288 mmcblk0p7 
I: 179  8   64 mmcblk0p8 
I: 179  9   64 mmcblk0p9 
I: 179  10  1024 mmcblk0p10 
I: 179  11  32768 mmcblk0p11 
I: 179  12  32768 mmcblk0p12 
I: 179  13  262144 mmcblk0p13 
I: 179  14  262144 mmcblk0p14 
I: 179  15 2683736 mmcblk0p15 
I: 8  0 7847935 sda 
I: 8  1 7845888 sda1 

しかし、私の親指ドライブは離れリストのではありません。だから私はそれを何らかの方法でマウントする必要があると推測しています。サムドライブをマウントしてファイルにアクセスするにはどうすればよいですか?

答えて

2

USBドライブは現在自動的にマウントされていません。コードを動作させるためには、手動でマウントする必要がありました。

/procパーティションに表示されているように(/proc/partitions)、USBドライブはsdaとして検出されます。

  • を取り付け

    ADBは

    mkdir /mnt/usb 
    
  • マウントするデバイス

    mount -t vfat -o rw /dev/block/sda1 /mnt/usb 
    

をマウントするディレクトリを作成します今、あなたはSHOU ADB経由でもアプリ内からでもUSBドライブ上のファイルを一覧表示(および管理)することができます(/mnt/usbも記録されます)。

私はまだテストしていませんが、Runtime.getRuntime().exec(...)を使用して同じ手順をプログラムで試すことができます。おそらく、最初にsuを "つかむ"必要があることに注意してください。これは簡単な作業ではなく、質問の範囲外になります(suに関する私のコメントを参照してください)。

+0

これは、期待と方法の両方で深く間違っているアプリからこれを行うことができるようになるまでの間です。「su」は機能していても獲得できません。要求プロセスではなく実行されるサブプロセス。 –

+0

@Chris Stratton、_ "suは動作しても得られない(ここではありません!)" _なぜですか? 'Android Things'のバージョンの' system/xbin'を 'list'しましたか? 'su'は非常に最初の開発者プレビューのために出荷されました... – Onik

+0

@Chris Stratton、_それは実行するサブプロセスにのみ適用され、要求プロセスではありません。あなたは、プログラムからサブプロセスへの読み書き方法を確かに知っています。仕事は些細なことではなく、問題の範囲外に出ます...答えを下降させることは、私には不合理なようです... – Onik

関連する問題