본문 바로가기

소프트웨어/Android/Java/Ndk

android] USB State Broadcast


Android의 풀 소스에서는 UsbManager를 이용해서 연결/끊김을 체크한다.

그런데 우리가 사용하는 일반적인 sdk에서는 Usb의 State를 받아올 수 없다.(왜인지는 모르겠으나..)

그래서 Android의 풀 소스에서 Usb 연결을 담당하는

/package/apps/Settings/src/com/android/settings/에서 소스를 찾아보니


UsbManager.USB_STATE

UsbManager.USB_CONNECTED 


와 같은 final String을 이용해 리시빙을 하고 있었다.


그래서 구글링을 통해 해당 intent의 String값을 알아내서 아래와 같이 USB_STATE를 체크하였다.


public void onReceive(Context context, Intent intent) {
		Log.d("mstag", "Received : "+intent.getAction());

		String action = intent.getAction();
		
		if(action.equals("android.hardware.usb.action.USB_STATE")) { // UsbManager.ACTION_USB_STATE
			Bundle extras = intent.getExtras();			
			boolean usbConnected = extras.getBoolean("connected"); // UsbManager.USB_CONNECTED
			String usbState = "";
			if(usbConnected) {
				usbState = "connected";
			} else {
				usbState = "disconnected";
			}
			Toast.makeText(context, "usb state change:"+usbState, Toast.LENGTH_SHORT).show();
		}


+onRecevice에 위와 같이 함수를 넣어놓고 리시버를 등록하면 USB를 빼거나 꼽을때마다 토스트가 날라온다.



+Settings Project의 AndroidManifest.xml을 열어보았다.


USB관련 리시빙을 시스템용과 유저용으로 나눠서 받는듯하다.