1 package ai.suanzi.rtmpclient;
3 import android.hardware.usb.UsbManager;
4 import android.content.Context;
5 import android.hardware.usb.UsbDevice;
6 import android.hardware.usb.UsbDeviceConnection;
8 import java.util.ArrayList;
9 import java.util.HashMap;
10 import java.util.Iterator;
11 import java.util.ListIterator;
12 import java.util.List;
13 import org.apache.log4j.Logger;
14 import android.app.PendingIntent;
15 import android.content.Intent;
16 import android.content.IntentFilter;
17 import android.content.BroadcastReceiver;
19 public class UsbMonitor {
21 private UsbListener mListener;
22 private Context mContext;
23 private UsbManager mUsbManager;
24 private List<UsbDevice> mUsbCameraList = new ArrayList<>();
26 private static Logger gLogger = Logger.getLogger("UsbMonitor");
28 public UsbMonitor(UsbListener listener, Context context){
31 mUsbManager = (UsbManager) mContext.getSystemService(Context.USB_SERVICE);
33 HashMap<String, UsbDevice> deviceList = mUsbManager.getDeviceList();
34 gLogger.error("device list size : " + deviceList.size());
35 Iterator<UsbDevice> deviceIterator = deviceList.values().iterator();
36 //PendingIntent mPermissionIntent = PendingIntent.getBroadcast(mContext, 0, new Intent(ACTION_USB_PERMISSION), 0);
37 IntentFilter filter = new IntentFilter(UsbManager.ACTION_USB_DEVICE_DETACHED);
38 mContext.registerReceiver(mUsbReceiver, filter);
39 filter = new IntentFilter(UsbManager.ACTION_USB_DEVICE_ATTACHED);
40 mContext.registerReceiver(mUsbReceiver, filter);
41 filter = new IntentFilter(ACTION_USB_PERMISSION);
42 mContext.registerReceiver(mUsbReceiver, filter);
44 while (deviceIterator.hasNext()) {
45 UsbDevice device = deviceIterator.next();
46 gLogger.error(device.toString());
47 if(isUvcCamera(device)) mUsbCameraList.add(device);
49 //mUsbManager.requestPermission(device, mPermissionIntent);
52 private boolean isUvcCamera(UsbDevice device){
53 return (device.getDeviceProtocol() == 1 && device.getProductName().contains("Camera"));
56 public boolean hasUsbCamera(){
57 gLogger.error("hasUsbCamera - size: " + mUsbCameraList.size());
58 return (mUsbCameraList.size() > 0 ? true : false);
61 public int getUsbCameraCount(){
62 return mUsbCameraList.size();
65 private static final String ACTION_USB_PERMISSION = "ai.suanzi.rtmpclient.UsbMonitor.USB_PERMISSION";
67 private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() {
69 public void onReceive(Context context, Intent intent) {
70 gLogger.error("onReceive");
71 String action = intent.getAction();
72 if (ACTION_USB_PERMISSION.equals(action)) {
74 UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
76 if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, true)) {
78 gLogger.error( "extra permission granted");
79 //call method to set up device communication
83 gLogger.error("permission denied for device. " + device);
86 } else if (UsbManager.ACTION_USB_DEVICE_DETACHED.equals(action)){
87 UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
89 gLogger.error("Device plug out");
90 gLogger.error(device.toString());
91 if(isUvcCamera(device)) {
92 mUsbCameraList.remove(device);
93 mListener.onCameraConnected();
96 } else if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(action)) {
97 UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
98 gLogger.error("Device plug in");
99 gLogger.error(device.toString());
100 if(isUvcCamera(device)) {
101 mUsbCameraList.add(device);
102 mListener.onCameraDisconnected();
108 public interface UsbListener {
109 void onCameraConnected();
110 void onCameraDisconnected();