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 IntentFilter filter = new IntentFilter(UsbManager.ACTION_USB_DEVICE_DETACHED);
32 mContext.registerReceiver(mUsbReceiver, filter);
33 filter = new IntentFilter(UsbManager.ACTION_USB_DEVICE_ATTACHED);
34 mContext.registerReceiver(mUsbReceiver, filter);
35 filter = new IntentFilter(ACTION_USB_PERMISSION);
36 mContext.registerReceiver(mUsbReceiver, filter);
38 HashMap<String, UsbDevice> deviceList;
40 deviceList = mUsbManager.getDeviceList();
41 } catch (NullPointerException e) {
42 gLogger.error(e.getMessage());
46 gLogger.error("device list size : " + deviceList.size());
47 Iterator<UsbDevice> deviceIterator = deviceList.values().iterator();
48 //PendingIntent mPermissionIntent = PendingIntent.getBroadcast(mContext, 0, new Intent(ACTION_USB_PERMISSION), 0);
49 while (deviceIterator.hasNext()) {
50 UsbDevice device = deviceIterator.next();
51 gLogger.error(device.toString());
52 if(isUvcCamera(device)) mUsbCameraList.add(device);
54 //mUsbManager.requestPermission(device, mPermissionIntent);
57 public void unregisterReceiver (){
58 mContext.unregisterReceiver(mUsbReceiver);
61 private boolean isUvcCamera(UsbDevice device){
62 if((device == null) || (device.getProductName() == null)) return false;
63 return device.getProductName().toLowerCase().contains("camera") || (device.getDeviceProtocol() == 1);
66 public boolean hasUsbCamera(){
67 gLogger.error("hasUsbCamera - size: " + mUsbCameraList.size());
68 return mUsbCameraList.size() > 0;
71 public int getUsbCameraCount(){
72 return mUsbCameraList.size();
75 private static final String ACTION_USB_PERMISSION = "ai.suanzi.rtmpclient.UsbMonitor.USB_PERMISSION";
77 private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() {
79 public void onReceive(Context context, Intent intent) {
80 gLogger.error("onReceive");
81 String action = intent.getAction();
82 if (ACTION_USB_PERMISSION.equals(action)) {
84 UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
86 if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, true)) {
88 gLogger.error( "extra permission granted");
89 //call method to set up device communication
93 gLogger.error("permission denied for device. " + device);
96 } else if (UsbManager.ACTION_USB_DEVICE_DETACHED.equals(action)){
97 UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
99 gLogger.error("Device plug out");
100 gLogger.error(device.toString());
101 if(isUvcCamera(device)) {
102 mUsbCameraList.remove(device);
103 mListener.onCameraDisconnected();
106 } else if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(action)) {
107 UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
108 gLogger.error("Device plug in");
109 gLogger.error(device.toString());
110 if(isUvcCamera(device)) {
111 mUsbCameraList.add(device);
112 mListener.onCameraConnected();
118 public interface UsbListener {
119 void onCameraConnected();
120 void onCameraDisconnected();