携帯電話に差し込む小さなケーブルがあります。反対側には USB ポートがあり、ここにフラッシュ ドライブなどを差し込むことができます。
フラッシュドライブを接続すると、次のような通知が表示されます:
USBマスストレージ接続
ファイル エクスプローラー アプリを起動すると、ドライブが次の場所にあることがわかります。
/ストレージ/UsbDriveA/
それは素晴らしいことですが、コード内でフラッシュ ドライブにアクセスする方法を知りたいです。SD カードにアクセスするのは簡単です。
File sdCard = Environment.getExternalStorageDirectory();
File directory = new File (sdCard.getAbsolutePath() + "/MyFiles")
directory.mkdirs();
しかし、フラッシュ ドライブの場合はどうすればよいでしょうか? よろしくお願いします! :)
ベストアンサー1
この例では、Apache の FileUtils を使用していますが、これを使用しなくても、USB フラッシュ ドライブの読み取りに使用されるロジックを確認できます。
private UsbManager usbManager;
private UsbDevice clef;
ArrayList<File> images;
usbManager = (UsbManager) getSystemService(Context.USB_SERVICE);
clef = null;
if (usbManager != null)
{
HashMap<String,UsbDevice> deviceList = usbManager.getDeviceList();
if (deviceList != null)
{
Iterator<UsbDevice> deviceIterator = deviceList.values().iterator();
while (deviceIterator.hasNext()) {
clef = deviceIterator.next();
}
}
}
if (clef != null)
{
File directory = new File("/storage/UsbDriveA/");
if (directory != null) {
if (directory.canRead()) {
images = new ArrayList<File>();
String[] imageExtensions = {"jpg","jpeg","png","gif","JPG","JPEG","PNG","GIF"};
Iterator<File> iterateImages = FileUtils.iterateFiles(directory, imageExtensions, true);
while (iterateImages.hasNext()) {
File theImage = iterateImages.next();
if (!theImage.getName().startsWith(".", 0))
images.add(theImage);
}
// custom process / methods... not very relevant here :
imageIndex = 0;
scale = 1.0f;
countImgs = images.size();
loadImage(imageIndex);
}
}
}
私のマニフェストにはそれらの行がありますが、すべてが必須かどうかはわかりません...
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-feature android:name="android.hardware.usb.host" />
<uses-permission android:name="android.permission.USB_PERMISSION" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />