android xml pid vid,增加属性标识摄像头的vid与pid,以便知道摄像头与设备文件的对应关系...
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,以便知道摄像头与设备文件的对应关系...相关推荐
- 可以在xml中靠增加属性来实现分组
可以在一篇xml文档中,靠增加一个行的属性,来进行排序. 有这方面需求的folks,请参考如下代码: private void UniteHtmlCell(ref XmlDocument xDocu ...
- Android XML文件中定义动画的一些属性
1.在res目录下新建anim文件夹 2.写一个xxx.xml 3.在xml中加入一些控制动画的属性. <set xmlns:android="http://schemas.andro ...
- 一、android XML资源文件详解 —— 从物理上分析
转载地址:http://blog.csdn.net/Scotfield_msn/article/details/52455022?locationNum=8 一.android工程文件夹内容介绍 在e ...
- android xml java混合编程_Java学习中注解与多线程,网络编程与XML技术
本部分内容主要有集合框架及泛型,实用类,输入和输出处理,注解与多线程,网络编程与XML技术.初次学习这部分会感觉很难,主要是概念难于理解,最好是多看看例子,多练习.下面是个人的总结 拉勾IT课小编为大 ...
- 简单的Android XML布局使用
Android XML布局 前言 今天我们来简单介绍一下Android的XML布局以及三种常见的XML布局 目录 1.XML布局的优点 在XML文件中设计UI可以更好地将应用的外观与控制应用行为的代码 ...
- Android XML小工具
Android XML小工具 一.概述 XML与Object互相转化,支持8种基本类型.String和byte[].byte[]需要经由base64编码(API8以后才有,之前版本可以自己拷入). 更 ...
- android XMl 解析神奇xstream 六: 把集合list 转化为 XML文档
前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...
- android XMl 解析神奇xstream 四: 将复杂的xml文件解析为对象
前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...
- 【Android】关于Android控件EditText的属性InputType的一些经验
关于Android控件EditText的属性InputType的一些经验 来源:http://blog.163.com/inflexible_simple/blog/static/16769468 ...
最新文章
- MITRE:利用微生物组时间序列数据推断与宿主状态变化相关的特征
- 深入理解Redis主键失效原理及实现机制
- Redis 宝典 | 基础、高级特性与性能调优
- 4种必须知道的Android屏幕自适应解决方案
- python中with open写csv文件_Python中的CSV文件使用with语句的方式详解
- Android WebView 使用漏洞
- DLL导出函数名称改编的解决方法
- [导入]Visual Studio 2005 Team Edition软件架构系列课程(1): 概述
- html表格中的内容只读,HTML表单只读选择标记/输入
- Windows 下 Git 的安装及如何与码云协作
- 7. 生信技能树——TCGA癌症数据2
- 您的计算机究竟如何像美味的Reuben三明治
- 如何解决Mac电脑没声音了的问题
- Java LocalDate类| 带示例的getMonth()方法
- JS将unicode码转中文方法
- 不允许dllimport函数的定义
- 一张图,理清微服务架构路线(收藏)
- Windows10与Kali Linux之间通过XFTP来共享文件
- 从入门到入土:IP源地址欺骗dos攻击实验
- latex 参考文献显示问号_如何自学latex软件