** EDITは、AndroidのSDカード
ではなくSDカードにアクセスできません、私は、USBポートを介してアダプタ経由でアクセスしていますので、USBドライブとしてそれを考慮した方が良いかもしれません。
多くの苦労と研究の後、私は作業していたsdcard(USBドライブ)のパスに到達する方法を見つけることができました。一般的に、パスは/ mnt/media_rw/XXXX-XXXXです(XXXX-XXXXはsdcard(USBドライブ)のコードです)。
事は、私はそこにあるいくつかのファイルを読み込むしようとしていますが、私は
new File("/mnt/media_rw/XXXX-XXXX").listFiles();
を呼び出すとき、私はヌル配列を返すことを取得します。私はそれが内部にファイルを持っていることは確かです。私はこの電話機が動作する電話機を持っているので、電話機は「mnt/media_rw/XXXX-XXXX」ではありません。その電話機と同じパスを使用しても機能しません。 READ_EXTERNAL_STORAGEとREAD_PHONE_STATE:
は、私は2つの権限を持っているこのポストHow can I get the list of mounted external storage of android device
て、そのパスに達しました。マニフェストとプログラムでボットを追加しなければなりませんでした。
**
public static String findFileInStorages(String filename) throws Exception {
List<StorageUtils.StorageInfo> storageList = StorageUtils.getStorageList(); // Here i get 2 paths: 1) /storage/emulated/0; 2) /mnt/media_rw/XXXX-XXXX
for(int i = 0; i < storageList.size(); i++) {
String pathToFile = findFileWithBasePath(new File(storageList.get(i).path, filename);
if (pathToFile != null) return pathToFile;
}
throw new Exception("Couldn't find file");
}
public static String findFileWithBasePath(File file, String fileName) throws Exception {
File listFile[] = file.listFiles();
String outputFile = null;
if (listFile != null && listFile.length > 0) {
for (int i = 0; i < listFile.length; i++) {
if (listFile[i].isDirectory()) {
outputFile = findFileWithBasePath(listFile[i], fileName);
} else {
if(listFile[i].getName().contains(fileName)) {
return listFile[i].getAbsolutePath();
}
}
if (outputFile != null) return outputFile;
}
}
return null;
}
"getStorageList()" メソッドと "StorageUtils" および "StorangeInfo" クラスを追加したが、上記のリンクにあります。私はそれのコードのものを変更しませんでした。
追加できるものがあれば、尋ねてください。
おかげ
コードを投稿..... –
あなたは[リムーバブルメディア](https://commonsware.com/blog/2014/04/09/storage-situation-removable-storage)上の任意の場所へのファイルシステムアクセス権を持っていません。 .html)をAndroid 4.4以降でご利用いただけます。 – CommonsWare
これはあなたに役立つと思いますか? https://developer.android.com/reference/android/os/Environment.html#getExternalStoragePublicDirectory(java.lang.String) – notsopopularguy