X-Git-Url: http://47.100.26.94:8080/?a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fai%2Fsuanzi%2Frtmpclient%2FUsbMonitor.java;h=f1e06f042bcabf723a597bd03d4f00cea1ffc805;hb=410441c06aa4257d7d9dcb1b581abb4017c67c50;hp=fc8bbdd71486aef7a55c9a0abaf10e98480ce9be;hpb=9773f3da1389f4e52fecfc79686fe2c94b08d6bc;p=rtmpclient.git diff --git a/app/src/main/java/ai/suanzi/rtmpclient/UsbMonitor.java b/app/src/main/java/ai/suanzi/rtmpclient/UsbMonitor.java index fc8bbdd..f1e06f0 100644 --- a/app/src/main/java/ai/suanzi/rtmpclient/UsbMonitor.java +++ b/app/src/main/java/ai/suanzi/rtmpclient/UsbMonitor.java @@ -1,4 +1,112 @@ package ai.suanzi.rtmpclient; +import android.hardware.usb.UsbManager; +import android.content.Context; +import android.hardware.usb.UsbDevice; +import android.hardware.usb.UsbDeviceConnection; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.ListIterator; +import java.util.List; +import org.apache.log4j.Logger; +import android.app.PendingIntent; +import android.content.Intent; +import android.content.IntentFilter; +import android.content.BroadcastReceiver; + public class UsbMonitor { + + private UsbListener mListener; + private Context mContext; + private UsbManager mUsbManager; + private List mUsbCameraList = new ArrayList<>(); + + private static Logger gLogger = Logger.getLogger("UsbMonitor"); + + public UsbMonitor(UsbListener listener, Context context){ + mListener = listener; + mContext = context; + mUsbManager = (UsbManager) mContext.getSystemService(Context.USB_SERVICE); + + HashMap deviceList = mUsbManager.getDeviceList(); + gLogger.error("device list size : " + deviceList.size()); + Iterator deviceIterator = deviceList.values().iterator(); + //PendingIntent mPermissionIntent = PendingIntent.getBroadcast(mContext, 0, new Intent(ACTION_USB_PERMISSION), 0); + IntentFilter filter = new IntentFilter(UsbManager.ACTION_USB_DEVICE_DETACHED); + mContext.registerReceiver(mUsbReceiver, filter); + filter = new IntentFilter(UsbManager.ACTION_USB_DEVICE_ATTACHED); + mContext.registerReceiver(mUsbReceiver, filter); + filter = new IntentFilter(ACTION_USB_PERMISSION); + mContext.registerReceiver(mUsbReceiver, filter); + + while (deviceIterator.hasNext()) { + UsbDevice device = deviceIterator.next(); + gLogger.error(device.toString()); + if(isUvcCamera(device)) mUsbCameraList.add(device); + } + //mUsbManager.requestPermission(device, mPermissionIntent); + } + + private boolean isUvcCamera(UsbDevice device){ + return (device.getDeviceProtocol() == 1 && device.getProductName().contains("Camera")); + } + + public boolean hasUsbCamera(){ + gLogger.error("hasUsbCamera - size: " + mUsbCameraList.size()); + return (mUsbCameraList.size() > 0 ? true : false); + } + + public int getUsbCameraCount(){ + return mUsbCameraList.size(); + } + + private static final String ACTION_USB_PERMISSION = "ai.suanzi.rtmpclient.UsbMonitor.USB_PERMISSION"; + + private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() { + + public void onReceive(Context context, Intent intent) { + gLogger.error("onReceive"); + String action = intent.getAction(); + if (ACTION_USB_PERMISSION.equals(action)) { + synchronized (this) { + UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE); + + if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, true)) { + if(device != null){ + gLogger.error( "extra permission granted"); + //call method to set up device communication + } + } + else { + gLogger.error("permission denied for device. " + device); + } + } + } else if (UsbManager.ACTION_USB_DEVICE_DETACHED.equals(action)){ + UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE); + if (device != null){ + gLogger.error("Device plug out"); + gLogger.error(device.toString()); + if(isUvcCamera(device)) { + mUsbCameraList.remove(device); + mListener.onCameraConnected(); + } + } + } else if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(action)) { + UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE); + gLogger.error("Device plug in"); + gLogger.error(device.toString()); + if(isUvcCamera(device)) { + mUsbCameraList.add(device); + mListener.onCameraDisconnected(); + } + } + } + }; + + public interface UsbListener { + void onCameraConnected(); + void onCameraDisconnected(); + } }