2017-06-26 59 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連接或斷開時間。