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 public void unregisterReceiver (){
51 mContext.unregisterReceiver(mUsbReceiver);
55 private boolean isUvcCamera(UsbDevice device){
56 return device.getProductName().toLowerCase().contains("camera") || (device.getDeviceProtocol() == 1);
59 public boolean hasUsbCamera(){
60 gLogger.error("hasUsbCamera - size: " + mUsbCameraList.size());
61 return (mUsbCameraList.size() > 0 ? true : false);
64 public int getUsbCameraCount(){
65 return mUsbCameraList.size();
68 private static final String ACTION_USB_PERMISSION = "ai.suanzi.rtmpclient.UsbMonitor.USB_PERMISSION";
70 private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() {
72 public void onReceive(Context context, Intent intent) {
73 gLogger.error("onReceive");
74 String action = intent.getAction();
75 if (ACTION_USB_PERMISSION.equals(action)) {
77 UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
79 if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, true)) {
81 gLogger.error( "extra permission granted");
82 //call method to set up device communication
86 gLogger.error("permission denied for device. " + device);
89 } else if (UsbManager.ACTION_USB_DEVICE_DETACHED.equals(action)){
90 UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
92 gLogger.error("Device plug out");
93 gLogger.error(device.toString());
94 if(isUvcCamera(device)) {
95 mUsbCameraList.remove(device);
96 mListener.onCameraDisconnected();
99 } else if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(action)) {
100 UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
101 gLogger.error("Device plug in");
102 gLogger.error(device.toString());
103 if(isUvcCamera(device)) {
104 mUsbCameraList.add(device);
105 mListener.onCameraConnected();
111 public interface UsbListener {
112 void onCameraConnected();
113 void onCameraDisconnected();