2017-06-08 6 views
-2

ファイルへのアクセスが必要です: "/mnt/media_rw/72Ab-289A/myFile.mp3" このファイルは、Moto G5 Android 7スマートフォンのUSBスティックにあります。AndroidファイルUSB Stick Access?

しかし、それはできません。私は/ mnt/media_rw /フォルダを読むことができません。

アクセス許可:WRITE_EXTERNAL_STORAGE、READ_EXTERNAL_STORAGEが設定されているため、問題はありません。

私は5時間、Google、Environment.getExternalStorageDirectory()、ContextCompat.getExternalFilesDirs、File.readFilesなどを試しましたが、何も問題はありません。

誰もいませんか?完全な解決策を教えてください。

+0

可能な重複(https://stackoverflow.com/questions/24075352/get-access- [アンドロイドにUSBマスストレージデバイスへのアクセスを取得] to-usb-mass-storage-device-inroid) –

+0

ありがとう、私は数時間前にその記事を読んだが、動作していない。 USBスティックが「/ storage/UsbDriveA /」にありません – Kyle

答えて

0

USBまたはドライブの権限があると思われます。 Android 6を搭載したODROID C2では正常に動作しています。しかし、私のMoto G5(Android 7)とAsus Zen Tablet(Android 6)ではうまくいきません。

私は「Intent.ACTION_OPEN_DOCUMENT」ファイルピッカーでファイルを選択することができ、すべてのデバイス上のドキュメントのパスが同じである...しかし、ボリュームの一部が存在しない。

Asusの禅(アンドロイド6 )

巻:/storage/7C23-16EA/m_BlueforLabrusca.mp3

:/ストレージ/ファイルを選択/ 0

をエミュレート。 。 。

ODroid C2(アンドロイド6)

巻:選択したファイル/ストレージ/ 7C23-16EA

:/ストレージ/内部

巻:/ストレージ//0

ボリュームをエミュレート:/storage/7C23-16EA/m_BlueforLabrusca.mp3

StorageManager storageManager = (StorageManager) context.getSystemService(Context.STORAGE_SERVICE); 
Class<?> StorageVolume = Class.forName("android.os.storage.StorageVolume"); 
Method getVolumeListMethod = StorageManager.class.getDeclaredMethod("getVolumeList"); 
Method methodGetPath = StorageVolume.getDeclaredMethod("getPath"); 

Object[] storageVolumeList = (Object[]) getVolumeListMethod.invoke(storageManager); 
    final int length = Array.getLength(storageVolumeList); 
      for (int i = 0; i < length; i++) { 

       Object storageVolumeElement = Array.get(storageVolumeList, i); 
       String path = (String) methodGetPath.invoke(storageVolumeElement); 
       path = new File(path).getAbsolutePath(); 

       volumes.add(new File(path)); 

       Log.i("!!!","Volume: " + path); 
      }