如何在Android 4.2中检测USB连接?

3

我使用了 ACTION_MEDIA_MOUNTEDACTION_MEDIA_UNMOUNTED 来检测在 Nexus 4 上的 USB 连接,但是我无法接收到任何广播信号。

这是我的广播接收器代码:

IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_MEDIA_MOUNTED);
filter.addAction(Intent.ACTION_MEDIA_UNMOUNTED);
filter.addDataScheme("file");

debugReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        final String action = intent.getAction();
        if (Intent.ACTION_MEDIA_MOUNTED.equals(action)) {
            debugOn = true;
        } else if (Intent.ACTION_MEDIA_UNMOUNTED.equals(action)) {
            debugOn = false;
        }
    }
};
registerReceiver(debugReceiver, filter);

有什么想法吗?我也搜索了其他问题;他们说如果我添加

"filter.addDataScheme("file");"

我会收到信号,但我已经尝试过了,没有接收到任何东西。

1个回答

4

使用 UsbManager.ACTION_USB_DEVICE_ATTACHEDUsbManager.ACTION_USB_DEVICE_DETACHED 作为意图过滤器。

要检查是否连接到电脑,请使用 Intent.ACTION_BATTERY_CHANGED,并在 onReceive 中使用 intent.getInt(BatteryManager.EXTRA_PLUGGED) 查看值是否为 BatteryManager.BATTERY_PLUGGED_USB


我尝试了你的方法,但仍然无法得到任何东西。我需要删除 filter.addDataScheme("file") 吗?我还尝试了 Intent.ACTION_POWER_CONNECTEDIntent.ACTION_POWER_DISCONNECTED,它们可以被接收到。但我想检测手机连接到电脑的操作。 - Ricky Li
嗨,Hoan。这个方法可能无法区分PC连接和普通充电连接,因为如果我使用壁挂式充电器连接手机,intent.getInt(BatteryManager.EXTRA_PLUGGED)的值仍然等于BatteryManager.BATTERY_PLUGGED_USB - Ricky Li
在这种情况下,请注册Intent.ACTION_POWER_CONNECTED,它应该会在普通充电时显示。 - Hoan Nguyen
你如何通过一个返回真/假的单一函数来检查设备是否已连接?编辑:没关系,在这里:http://stackoverflow.com/a/19229024/878126 - android developer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接