2017-06-26 40 views
0

我想在用户连接或断开USB设备时触发事件。我有以下代码:检测USB状态更改android java

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的事件监听器,但我似乎找不到任何东西。其实,我确实找到了一些,但他们很混乱,很老。 (一两年以前。)


受审CODE

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的监听器。我认为这会快很多。

回答

0

您可以使用广播接收器用于接收连接和断开操作:

 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); 

该广播接收器将接收每一个动作温家宝USB连接或断开时间。