【问题标题】:Android: Detect USB flash drive plugged inAndroid:检测插入的 USB 闪存驱动器
【发布时间】:2011-11-11 00:37:01
【问题描述】:

有没有办法检测 USB 闪存驱动器何时插入 Android 设备?我可以使用广播接收器检测 SD 卡,但它不适用于 USB。我想避免投票。

注册接收者的代码:

private void RegisterUpdateReceiver()
{
    IntentFilter intentFilter = new IntentFilter();
    intentFilter.addAction("android.intent.action.MEDIA_MOUNTED");
    intentFilter.addDataScheme("file");
    myReceiver = new MyReceiver();
    this.registerReceiver(myReceiver, intentFilter);
}

接收方代码:

public class MyReceiver extends BroadcastReceiver
{
    @Override
    public void onReceive(Context context, Intent intent)
    {
        String action = intent.getAction();
        if (action.equals("android.intent.action.MEDIA_MOUNTED")) 
        {
            // react to event
        }
}

【问题讨论】:

  • 您在问题中发布的代码非常适合我检测带有 Android 6 的 Allwinner 开发板上的 USB 驱动器(通过 USB OTG)

标签: android broadcastreceiver


【解决方案1】:

如果检测到连接和分离 USB 将起作用,则可以使用“android.hardware.usb.action.USB_DEVICE_ATTACHED”。 确保在清单中也添加了接收器和意图过滤器的定义。

【讨论】:

  • 在我的智能手机上,该事件发生在驱动器安装之前。我需要等待一秒钟才能使用驱动器。
【解决方案2】:

在 SDK 级别,Android 没有 USB 驱动器的概念。没有关于它们应该安装在哪里、何时出现/消失等的规则。也许这方面的一些标准化会在未来的 Android 版本中出现,但今天还没有。

【讨论】:

  • Logcat 显示了一些与 USB 挂载相关的事件,但我无法在 SDK 级别检测到这一点。听起来你说的是对的。 W/MountService(931):getVolumeState(/mnt/usbdisk):未知卷 E/VoldConnector(931):错误处理“605 卷 usbdisk /mnt/usbdisk 状态从 3(检查)更改为 4(已安装)”
  • 祝你好运,我还使用 ACTION_MEDIA_REMOVED 和其他接收器相关的 USB 挂载和卸载...但没有任何效果..但在命令提示符中显示 USB 日志?
  • @Shubh:从 Android 4.2 开始,所写的答案仍然准确。
  • 我得到了答案..我在接收器类中添加了 标签..它对我有用。
  • @androiddeveloper:对不起,我不知道。
【解决方案3】:

这是AndroidManifest.xml中接收器的xml版本:

        <receiver
            android:name="MyMountBroadcastReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MEDIA_MOUNTED"/>
                <action android:name="android.intent.action.MEDIA_UNMOUNTED"/>
                <data android:scheme="file" />
            </intent-filter>

        </receiver>

【讨论】:

    【解决方案4】:

    这就是我让它在 Android 6.0 上运行的方式。 基本上,我们需要检测的是何时安装驱动器,这可以通过 ACTION_MEDIA_MOUNTED 完成,即“android.intent.action.MEDIA_MOUNTED”。

    按照以下步骤操作:

    1. 为“ACTION_USB_DEVICE_ATTACHED”注册广播接收器
    2. 为“ACTION_MEDIA_MOUNTED”注册广播接收器
    3. 在收到“ACTION_USB_DEVICE_ATTACHED”操作时寻求使用设备的许可。 然后您将收到“ACTION_MEDIA_MOUNTED”的广播

    您可以参考:https://developer.android.com/reference/android/content/Intent#ACTION_MEDIA_MOUNTED

    注意:单独为 ACTION_MEDIA_MOUNTED 注册广播接收器不起作用。所以使用广播“ACTION_USB_DEVICE_ATTACHED”来获得许可。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-02
      • 1970-01-01
      • 1970-01-01
      • 2010-10-17
      相关资源
      最近更新 更多