Android:检测插入的USB闪存盘

时间:2011-11-11 00:37:02

标签: android broadcastreceiver

有没有办法检测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
        }
}

4 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

Android,在SDK级别,没有USB驱动器的概念。没有关于它们应该安装的位置的规则,当它们出现/消失时的广播等等。也许这个领域的一些标准化将在未来的Android版本中出现,但它今天不存在。

答案 2 :(得分:1)

这是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>

答案 3 :(得分:1)

这就是我使它在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”。