检测USB STATE CHANGE android java

时间:2017-06-26 01:26:17

标签: java android

我希望能够在用户连接或断开USB设备时触发事件。我有以下代码:

public static boolean isConnected(Context context) {
    Intent intent = context.registerReceiver(null, new IntentFilter("android.hardware.usb.action.USB_STATE"));
    return intent.getExtras().getBoolean("connected");
}

以上是另一个StackOverflow问题。

我怎样才能解决我面临的问题?如果状态发生变化,我认为每隔x秒检查一次是否切合实际。所以,我在网上查了一个关于USB_CONNECTION的事件监听器,但我似乎找不到任何东西。实际上,我确实找到了一些,但他们很混乱,而且很老。 (一两年前。)

审判代码

while(notFinished) {
    if (!isConnected(this)) {
        pause();
    } else if (!mediaPlayer.isPlaying() && isConnected(this)) {
        play();
    } else {
        Log.e("[ERROR]: ", "An error has occured at startSong!");
    }
    try {
        Thread.sleep(100);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

^^^显然效率不高,但确实有效(有点)。那么,这就是为什么我来这里知道是否有USB_CONNECTION_STATUS的监听器。我认为这会快得多。

1 个答案:

答案 0 :(得分:0)

您可以使用BroadcastReceiver接收连接和断开连接的操作:

        BroadcastReceiver receiver = new BroadcastReceiver() {

            @Override
            public void onReceive(Context context, Intent intent) {
                if (intent.getExtras().getBoolean("connected")) {
                    //start doing something for state - connected
                } else {
                    //start doing something for state - disconnected
                }
            }
        };

        IntentFilter filter = new IntentFilter();
        filter.addAction("android.hardware.usb.action.USB_STATE");

        registerReceiver(receiver, filter);

每次连接或断开连接时,此BroadcastReceiver都会收到操作。