1 package ai.suanzi.rtmpclient;
3 import android.hardware.usb.UsbManager;
4 import android.content.Context;
5 import android.hardware.usb.UsbDevice;
7 import java.util.ArrayList;
8 import java.util.HashMap;
9 import java.util.Iterator;
10 import java.util.List;
11 import org.apache.log4j.Logger;
12 import android.app.PendingIntent;
13 import android.content.Intent;
14 import android.content.IntentFilter;
15 import android.content.BroadcastReceiver;
17 public class UsbMonitor {
19 private UsbListener mListener;
20 private Context mContext;
21 private UsbManager mUsbManager;
22 private List<UsbDevice> mUsbCameraList = new ArrayList<>();
24 private static Logger gLogger = Logger.getLogger("UsbMonitor");
26 public UsbMonitor(UsbListener listener, Context context){
29 mUsbManager = (UsbManager) mContext.getSystemService(Context.USB_SERVICE);
31 HashMap<String, UsbDevice> deviceList = mUsbManager.getDeviceList();
32 gLogger.error("device list size : " + deviceList.size());
33 Iterator<UsbDevice> deviceIterator = deviceList.values().iterator();
34 //PendingIntent mPermissionIntent = PendingIntent.getBroadcast(mContext, 0, new Intent(ACTION_USB_PERMISSION), 0);
35 IntentFilter filter = new IntentFilter(UsbManager.ACTION_USB_DEVICE_DETACHED);
36 mContext.registerReceiver(mUsbReceiver, filter);
37 filter = new IntentFilter(UsbManager.ACTION_USB_DEVICE_ATTACHED);
38 mContext.registerReceiver(mUsbReceiver, filter);
39 filter = new IntentFilter(ACTION_USB_PERMISSION);
40 mContext.registerReceiver(mUsbReceiver, filter);
42 while (deviceIterator.hasNext()) {
43 UsbDevice device = deviceIterator.next();
44 gLogger.error(device.toString());
45 if(isUvcCamera(device)) mUsbCameraList.add(device);
47 //mUsbManager.requestPermission(device, mPermissionIntent);
50 private boolean isUvcCamera(UsbDevice device){
51 return (device.getDeviceProtocol() == 1 && device.getProductName().contains("Camera"));
54 public boolean hasUsbCamera(){
55 gLogger.error("hasUsbCamera - size: " + mUsbCameraList.size());
56 return (mUsbCameraList.size() > 0 ? true : false);
59 public int getUsbCameraCount(){
60 return mUsbCameraList.size();
63 private static final String ACTION_USB_PERMISSION = "ai.suanzi.rtmpclient.UsbMonitor.USB_PERMISSION";
65 private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() {
67 public void onReceive(Context context, Intent intent) {
68 gLogger.error("onReceive");
69 String action = intent.getAction();
70 if (ACTION_USB_PERMISSION.equals(action)) {
72 UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
74 if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, true)) {
76 gLogger.error( "extra permission granted");
77 //call method to set up device communication
81 gLogger.error("permission denied for device. " + device);
84 } else if (UsbManager.ACTION_USB_DEVICE_DETACHED.equals(action)){
85 UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
87 gLogger.error("Device plug out");
88 gLogger.error(device.toString());
89 if(isUvcCamera(device)) {
90 mUsbCameraList.remove(device);
91 mListener.onCameraConnected();
94 } else if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(action)) {
95 UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
96 gLogger.error("Device plug in");
97 gLogger.error(device.toString());
98 if(isUvcCamera(device)) {
99 mUsbCameraList.add(device);
100 mListener.onCameraDisconnected();
106 public interface UsbListener {
107 void onCameraConnected();
108 void onCameraDisconnected();