2017-06-26 2 views
0

Ich möchte in der Lage sein, ein Ereignis auszulösen, wenn ein Benutzer ein USB-Gerät verbindet oder trennt. Ich habe folgenden Code:Detect USB STATE CHANGE 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"); 
} 

Das obige stammt aus einer anderen StackOverflow Frage.


Wie kann ich über das Problem, dem ich gegenüberstehe, gehen? Ich denke nicht, dass es praktisch wäre, jede x Sekunde zu überprüfen, wenn sich der Zustand geändert hat. Also habe ich online nach einem Ereignis-Listener über USB_CONNECTION gesucht, aber ich kann keine finden. Eigentlich habe ich ein paar gefunden, aber sie waren verwirrend und ziemlich alt. (Ein oder zwei Jahre vor.)


TRIED 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(); 
    } 
} 

^^^ Offensichtlich nicht effizient, aber es funktioniert (ein wenig). Deshalb bin ich hierher gekommen, um zu wissen, ob es einen Listener für USB_CONNECTION_STATUS gibt. Ich denke, das wäre viel schneller.

Antwort

0

können Sie BroadcastReceiver verwenden für angeschlossen und getrennt Aktionen empfangen:

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

Diese BroadcastReceiver Aktionen jedes Mal erhalten wen usb verbunden oder getrennt.