我正在尝试简单地将一个简单的XML文件写入SD卡,我注意到我的Nexus 4确实写了该文件,但是使用Windows 7无法通过MTP协议查看.
码:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
CustomerQueryRqType customerQueryRequest = new CustomerQueryRqType();
Serializer serializer = new Persister();
File myFile = new File(Environment.getExternalStorageDirectory() + "/customerQueryRequest.xml");
try {
boolean created = myFile.createNewFile();
serializer.write(customerQueryRequest, myFile);
} catch (Exception e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
我可以使用Astro文件管理器在手机上看到该文件:
但Windows没有看到它......:
adb shell
在目录中显示:
ls -l
drwxrwxr-x root sdcard_rw 1970-01-16 20:51 Alarms
drwxrwxr-x root sdcard_rw 1970-01-16 20:51 Android
drwxrwxr-x root sdcard_rw 2012-11-21 19:30 DCIM
drwxrwxr-x root sdcard_rw 1970-01-16 20:51 Download
drwxrwxr-x root sdcard_rw 1970-01-16 20:51 …
Run Code Online (Sandbox Code Playgroud) 我刚买了一个新的4GB USB拇指驱动器,我正在尝试决定放在它上面.我正在考虑一个关于软件包的网络服务器,一个C/C++ IDE(倾向于Code :: Blocks;在我的旧USB驱动器上使用Dev-C++)和Python.
您随身携带哪些与开发相关的工具?
更新
我添加了类别.
Code :: Blocks开源,跨平台的C/C++ IDE
Codelite - 开源,跨平台C/C++ IDE
Eclipse - 开源,跨平台Java IDE
NetBeans - 开源,跨平台Java IDE
JCreator - Java IDE
MSVC6 - Microsoft的pre-.NET C/C++环境
Portable Python - Python编程语言的解释器
Strawberry Perl - "用于Windows®计算机的100%开源CPAN功能Perl,与其他地方的Perl完全相同."
Py3k - 最新版本的Python编程语言
Stackless Python
Lua - 脚本语言
MinGW - GCC的Windows端口排序
Notepad ++(经过这么多推荐,我不得不尝试)
UltraEdit - "text,hex,HTML,PHP,Java,Javascript,Perl和程序员的编辑器."
VIM - "高度可配置的文本编辑器,可实现高效的文本编辑"
我想构建一个程序来检测是否插入了usb(或两个或更多)(并将所有内容复制到硬盘上的任何文件夹)
有任何想法吗?我有这个,
using System.Runtime.InteropServices;
Run Code Online (Sandbox Code Playgroud)
但这不是简单的方法(我相信).我想要一些简单的事情
我有另一个想法(如果(文件夹存在)然后复制) - 但可能有一个问题,我想要一个很好的解决方案.
可能还有一个名为SerialPort的工具; 我可以用吗?如果是这样,我该如何使用它?
对于我的学校工作,我做了很多切换计算机(从实验室到笔记本电脑到图书馆).我有点想把这个代码置于某种版本控制之下.当然问题是我不能总是在我使用的计算机上安装其他软件.我可以在拇指驱动器上保留任何类型的版本控制系统吗?我有一个2GB的驱动器,但我可以在必要时获得更大的驱动器.
我正在做的项目并不是特别大.
编辑: 这需要在Windows下工作.
编辑II: Bazaar最终成为我选择的.如果你选择TortoiseBzr,那就更好了.
我正在尝试在运行Windows 7的计算机上安装Android USB驱动程序.我按照网站开发人员部分的说明操作,但我被卡住了.这是带有说明的网站;
http://developer.android.com/tools/extras/oem-usb.html#Win7
我遇到麻烦的是在步骤7-8,当我选择<sdk>/extras/google/usb_driver
我输入位置的路径后点击下一步.我收到一条错误消息"Windows无法找到您设备的驱动程序软件"
我曾尝试在开发者网站上寻求帮助,但我在这里要求的导航非常困难.
我很肯定,在计算机管理下,我选择了其他设备下的Android设备,我的另一个问题是两个"Android"驱动程序出现了,但我想这是因为我拥有以前的Android手机.见截图;
我的手机已插入电脑,手机中已经检查了USB调试.我拥有一台三星Ace II.
我有一台运行Android Honeycomb的数码单反相机和三星Galaxy Tab.使用USB电缆将DSLR连接到平板电脑(通过USB套件在平板电脑上启用主机功能).我希望在用户使用此外置摄像头拍照时收到通知,以便将此图像下载到平板电脑或使用它做其他事情,例如显示包含从图像中获取的元信息的Toast通知.
至于我获得允许监视更改的所有现有工具(如FileObserver
使用底层inotify
机制MediaContentProvider
等),需要查看特定文件或文件系统路径.这很好,直到我们在2.x和更早版本的Android版本中获得了块层协议支持 - 当你连接设备时,它已被安装在设备文件系统的某个地方,你可以使用这个挂载点作为这些工具的观察点.
由于Honeycomb Google已经将访问外部USB设备的方式改为Media Transfer Protocol
其中PTP
的一部分.现在,当我将外部USB设备连接到Android设备时,我将看不到任何挂载点(我正在使用adb shell
和后续mount
命令获取它们).此外,MTP
实现使用存储ID,它显然充当更高级别的抽象,并且只是普通的整数值.我希望有一种方法能够以某种方式将这些存储ID转换为真正的路径/ mountpoint /但是显然似乎没有.
考虑到MediaScanner
已经在我的设备上运行的Android ,我猜想Intent
当设备可以访问的媒体文件发生变化时,可以通过特殊的广播来管理这个问题,所以我开始寻找已经存在且适合Intents
被通知但没有运气-我只找到ACTION_MEDIA_MOUNTED
并且ACTION_MEDIA_REMOVED
当设备被连接和断开分别被仅广播.这意味着MediaScanner
在重新安装之前无法注意到设备上的任何更改(我使用库存应用程序对其进行了双重检查 - 在您拔下插头并将其插入Android设备之前,它不会在相机上看到任何新创建的图像再次).
试图获得外部SD卡的这个挂载路径,我使用了Environment.getExternalStorageDirectory()
API调用,但它产生了模拟Galaxy的sdcard路径,而/mnt/sdcard
不是相机的路径.所以它对我也不起作用.
我设法解决这个问题,只是发起了定期Timer
活动,AsyncTask
并作为一个TimerTask
.此任务会初始化USB连接,打开设备,扫描整个设备内存,仅获取最后拍摄的照片,然后关闭设备描述符和USB连接.
它看起来并不像做,考虑到它需要做的所有这些行动每一个可能是很经常的时间的最好的和有效的方式,说每5秒或10秒.它肯定会很快耗尽电池并产生不必要的系统I/O,仅用于拍摄最后拍摄的照片并将其与之前拍摄的照片进行比较(99%是相同的图像),但我没有找到任何更好的工作解决方案这样做.拥有基于事件的通知的观察者机制会好得多.
所以我的问题是有更有效的方式来通知Honeycomb或更高版本的Android版本的外部USB存储器的更改,而不是上面描述的那些?
为了将一些开发工作带回家,我必须能够运行PostgreSQL数据库.
我不想在家里的机器上安装任何东西.一切都应该从USB驱动器上运行.
这个问题涵盖了其他所有内容,但我还没有找到使postgresql可移植的指南.如果可能的话,这似乎并不容易.
那么如何让PostgreSQL移植?它甚至可能吗?
编辑:
PostgreSQL Portable工作.我的USB驱动器速度非常慢,但它确实有效.我不建议用它进行持续的开发,但是对于我需要的东西,它很棒.
也许如果我拿起全速外置硬盘,我会尝试虚拟化.鉴于仅从该驱动器运行数据库的性能较差,运行它的完整虚拟操作系统将无法使用.
所以我想我会在这里包括最终答案,所以你不必理解这篇文章.非常感谢Simon Mourier抽出时间来解决这个问题.
我的工作代码
try
{
//Get a list of available devices attached to the USB hub
List<string> disks = new List<string>();
var usbDevices = GetUSBDevices();
//Enumerate the USB devices to see if any have specific VID/PID
foreach (var usbDevice in usbDevices)
{
if (usbDevice.DeviceID.Contains(USB_PID) && usbDevice.DeviceID.Contains(USB_VID))
{
foreach (string name in usbDevice.GetDiskNames())
{
//Open dialog to show file names
textbox1.Text = name.ToString();
}
}
}
Run Code Online (Sandbox Code Playgroud)
所以,只需使用GetUSBDevices
我原来的问题,然后包括Simon Mourier的回答所显示的两个类,它应该是好的去!
原始问题
我知道之前已经问过这个问题(见这里)但是他们都没有得到确认答案,我已经尝试了所有建议的答案.不幸的是,这些线程已经很久了,我希望有人能在这里给出更好的答案.
到目前为止,我有两个"起点",我将在下面展示.
选项1 :(获取VID/PID但不是驱动器号)
我有一个嵌入式设备,我通过应用程序连接到该设备.我有代码可以成功扫描任何USB设备并检查VID/PID
.我成功检测到我的设备,但我不知道如何获取驱动器号.有人可以帮我吗?我觉得我可以添加另一条线,class …
是否可以通过唯一标识符识别USB设备,例如操作系统具有Mac-ID,硬盘ID,以太网卡ID是否具有唯一标识符?我知道可以轻松更改USB分区的卷序列号,也可以在用户格式化时更改.
但是有ID可以使用WMI服务通过MFC(Visual C++或C#)检索某种"USB硬盘ID或USB硬件ID"吗?这样的标识符对于物理设备是否是唯一的?请澄清......
usb-drive ×10
android ×3
c# ×3
usb ×3
mtp ×2
portability ×2
file ×1
nexus-4 ×1
postgresql ×1
survey ×1
usbserial ×1
visual-c++ ×1
windows ×1
wmi ×1