Android SDK如何访问U盘的文件系统?

How to access the filesystem of an USB Stick by Android SDK?

Here 另一位开发人员试图在 Android SDK 中访问 USB 记忆棒的文件系统。

但是USB Host Mode只能访问Raw Mode的USB Devices。 Here Android SDK 文档告诉我们文件流操作在 USB 附件模式下可用

但是如何实现呢?代码示例都不完整。

代码如下:

private TextView textView;
private PendingIntent mPermissionIntent;
private static final String ACTION_USB_PERMISSION =
        "com.android.example.USB_PERMISSION";
private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() {

    public void onReceive(Context context, Intent intent) {
        textView = (TextView) findViewById(R.id.textView);
        textView.setText("onReceive()... ");
        String action = intent.getAction();
        if (ACTION_USB_PERMISSION.equals(action)) {
            synchronized (this) {
                UsbAccessory accessory = (UsbAccessory) intent.getParcelableExtra(UsbManager.EXTRA_ACCESSORY);

                if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) {
                    textView.setText("accessing... ");
                    if(accessory != null){
                        //call method to set up accessory communication
                    }
                }
                else {
                    Log.d("onCreate()", "permission denied for accessory " + accessory);
                    textView.setText("permission denied for accessory ");
                }
            }
        }
    }
};


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_slideshow);


    UsbManager mUsbManager = (UsbManager) getSystemService(Context.USB_SERVICE);
    mPermissionIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0);
    IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION);
    registerReceiver(mUsbReceiver, filter);
}

但我的应用无法识别任何连接的 U 盘。该程序甚至没有跳入 onReceive()-Method。

清单文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="slideshow.xappo.de.xappo_slideshow" >

<uses-feature android:name="android.hardware.usb.accessory" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity

        android:name=".Slideshow"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED" />
        </intent-filter>
    </activity>
</application>

有人有示例代码如何在 U 盘上创建目录并从 U 盘复制一些文件吗?

此致

我找到了 "dirty" 解决方案。我只是使用标准 Java File-I/O 访问“/storage/usbdisk”。这适用于两个设备。在摩托罗拉 Moto G 和索尼 xPeria Z1 上。但我不知道是否每个 Android 4.x 设备都将 U 盘挂载到“/storage/usbdisk”。也许有人知道?我的应用程序必须 运行 在 Android 4.x 平板电脑上。

而且我仍然想让我的应用程序识别 USB 设备已插入/拔出。但是我发布的代码中的广播接收器不起作用。如何解决?