Android 在使用多个USB摄像头时,根据加载顺序不同他们的设备文件顺序不同,比如:“video0, video1, video2”,每次启动它们的顺序都可能不同,这样APP就无法知道哪个设备文件对应的是哪个摄像头,因此下面方案增加属性来标识设备文件与摄像头vid、pid的关系,这样就解决了上面的问题。

移植下面代码

diff --git a/frameworks/base/services/usb/java/com/android/server/usb/UsbDeviceManager.java b/frameworks/base/serv

index 26d5ac9..ce48b25 100755

--- a/frameworks/base/services/usb/java/com/android/server/usb/UsbDeviceManager.java

+++ b/frameworks/base/services/usb/java/com/android/server/usb/UsbDeviceManager.java

@@ -61,8 +61,10 @@ import com.android.internal.os.SomeArgs;

import com.android.internal.util.IndentingPrintWriter;

import com.android.server.FgThread;

+import java.io.BufferedReader;

import java.io.File;

import java.io.FileNotFoundException;

+import java.io.FileReader;

import java.io.IOException;

import java.util.HashMap;

import java.util.HashSet;

@@ -215,15 +217,29 @@ public class UsbDeviceManager {

if (devPath != null && devPath.contains("/devices/platform")) {

if ("video4linux".equals(subSystem)) {

Intent intent = new Intent(Intent.ACTION_USB_CAMERA);

+

String action = event.get("ACTION");

+ String name = event.get("DEVNAME");

+ String idProduct = searchAndReadFile("/sys" + devPath, "idProduct");

+ String idVendor = searchAndReadFile("/sys" + devPath, "idVendor");

+

+ if (DEBUG) Slog.d(TAG, action + " usb camera: " + name + " [" + idVendor + ":" + idProduct +

if ("remove".equals(action)){

Slog.d(TAG,"usb camera removed");

intent.setFlags(Intent.FLAG_USB_CAMERA_REMOVE);

SystemProperties.set("persist.sys.usbcamera.status","remove");

+

+ if (!name.isEmpty()) {

+ SystemProperties.set("topband.dev." + name, "");

+ }

} else if ("add".equals(action)) {

Slog.d(TAG,"usb camera added");

intent.setFlags(Intent.FLAG_USB_CAMERA_ADD);

SystemProperties.set("persist.sys.usbcamera.status","add");

+

+ if (!name.isEmpty() && !idProduct.isEmpty() && !idVendor.isEmpty()) {

+ SystemProperties.set("topband.dev." + name, idVendor + ":" + idProduct);

+ }

}

int num = android.hardware.Camera.getNumberOfCameras();

@@ -244,6 +260,47 @@ public class UsbDeviceManager {

}

};

+ private String searchAndReadFile(String devPath, String fileName) {

+ if (null != devPath && !devPath.isEmpty()) {

+ File dir = new File(devPath);

+ while (null != dir && dir.exists() && dir.isDirectory()) {

+ File file = new File(dir.getPath() + "/" + fileName);

+ if (file.exists()) {

+ return readFileByLines(file.getPath());

+ }

+ File parent = dir.getParentFile();

+ dir = parent;

+ }

+ }

+

+ return "";

+ }

+

+ private static String readFileByLines(String fileName) {

+ File file = new File(fileName);

+ BufferedReader reader = null;

+ StringBuilder builder = new StringBuilder();

+ try {

+ reader = new BufferedReader(new FileReader(file));

+ String tempString;

+ while ((tempString = reader.readLine()) != null) {

+ builder.append(tempString);

+ }

+ reader.close();

+ return builder.toString();

+ } catch (IOException e) {

+ Slog.e(TAG, "readFileByLines, " + e.getMessage());

+ } finally {

+ if (reader != null) {

+ try {

+ reader.close();

+ } catch (IOException ignored) {

+ }

+ }

+ }

+ return "";

+ }

+

public UsbDeviceManager(Context context, UsbAlsaManager alsaManager,

UsbSettingsManager settingsManager) {

mContext = context;

运行

编译运行后,读取属性如下:

[topband.dev.video0]: [0bda:2714]

[topband.dev.video1]: [0bda:b321]

android xml pid vid,增加属性标识摄像头的vid与pid,以便知道摄像头与设备文件的对应关系...相关推荐

  1. 可以在xml中靠增加属性来实现分组

    可以在一篇xml文档中,靠增加一个行的属性,来进行排序. 有这方面需求的folks,请参考如下代码:  private void UniteHtmlCell(ref XmlDocument xDocu ...

  2. Android XML文件中定义动画的一些属性

    1.在res目录下新建anim文件夹 2.写一个xxx.xml 3.在xml中加入一些控制动画的属性. <set xmlns:android="http://schemas.andro ...

  3. 一、android XML资源文件详解 —— 从物理上分析

    转载地址:http://blog.csdn.net/Scotfield_msn/article/details/52455022?locationNum=8 一.android工程文件夹内容介绍 在e ...

  4. android xml java混合编程_Java学习中注解与多线程,网络编程与XML技术

    本部分内容主要有集合框架及泛型,实用类,输入和输出处理,注解与多线程,网络编程与XML技术.初次学习这部分会感觉很难,主要是概念难于理解,最好是多看看例子,多练习.下面是个人的总结 拉勾IT课小编为大 ...

  5. 简单的Android XML布局使用

    Android XML布局 前言 今天我们来简单介绍一下Android的XML布局以及三种常见的XML布局 目录 1.XML布局的优点 在XML文件中设计UI可以更好地将应用的外观与控制应用行为的代码 ...

  6. Android XML小工具

    Android XML小工具 一.概述 XML与Object互相转化,支持8种基本类型.String和byte[].byte[]需要经由base64编码(API8以后才有,之前版本可以自己拷入). 更 ...

  7. android XMl 解析神奇xstream 六: 把集合list 转化为 XML文档

    前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...

  8. android XMl 解析神奇xstream 四: 将复杂的xml文件解析为对象

    前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...

  9. 【Android】关于Android控件EditText的属性InputType的一些经验

    关于Android控件EditText的属性InputType的一些经验   来源:http://blog.163.com/inflexible_simple/blog/static/16769468 ...

最新文章

  1. MITRE:利用微生物组时间序列数据推断与宿主状态变化相关的特征
  2. 深入理解Redis主键失效原理及实现机制
  3. Redis 宝典 | 基础、高级特性与性能调优
  4. 4种必须知道的Android屏幕自适应解决方案
  5. python中with open写csv文件_Python中的CSV文件使用with语句的方式详解
  6. Android WebView 使用漏洞
  7. DLL导出函数名称改编的解决方法
  8. [导入]Visual Studio 2005 Team Edition软件架构系列课程(1): 概述
  9. html表格中的内容只读,HTML表单只读选择标记/输入
  10. Windows 下 Git 的安装及如何与码云协作
  11. 7. 生信技能树——TCGA癌症数据2
  12. 您的计算机究竟如何像美味的Reuben三明治
  13. 如何解决Mac电脑没声音了的问题
  14. Java LocalDate类| 带示例的getMonth()方法
  15. JS将unicode码转中文方法
  16. 不允许dllimport函数的定义
  17. 一张图,理清微服务架构路线(收藏)
  18. Windows10与Kali Linux之间通过XFTP来共享文件
  19. 从入门到入土:IP源地址欺骗dos攻击实验
  20. latex 参考文献显示问号_如何自学latex软件

热门文章

  1. iOS 9: UIStackView入门
  2. SQL经典实例(五)元数据查询
  3. sysbench-系统、数据库压力测试工具
  4. 你值得拥有:25个Linux性能监控工具
  5. SpringMVC 整合新浪微博登录 Java SDK
  6. 从陈坤微信号说起:微信公众平台开发者的江湖
  7. 00asp.net_js前后台代码互访
  8. 解决Eclipse中SVN图标不显示
  9. 内网穿透从搭建到溯源
  10. docker 时间不一致,时区设置