- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试通过电缆将 android 设备连接到(Windows 7 64 位)PC,然后以编程方式将一些文件从 android 检索到 pc。
(注意:我需要这个用于特定设备,Moverio BT-200,我遇到了驱动程序问题;所以请不要建议使用 adb ;-)我知道那是简单快捷的方法,但不可行)
我发现我的设备可以被视为 Windows 便携设备 (WPD)。我在 C# 中找到了一些非常好的代码示例,使我能够 detect WPDs , 至 enumerate their contents , 和 transfer the contents .我还在 C++ 中找到了一些代码,它执行 all of the above and much more .只要我连接一个 sdcard 或一个 usb key (即:只要我有一个设备可以被 Windows 识别并获得一个字母作为正确的驱动器),所有这些示例就像一个魅力,我得到当前文件的完整列表及其绝对路径。但是,如果我尝试连接 Android 设备并列出内容,我会得到一些我不理解的内容:
embt2
SD Card
o15F9A
o15F9B
o15F9C
o15F9D
o15F9E
...etc
Internal Storage
o1
o2
o3
o4
o5
o6
oD1F
oD20
oD24
o7
o8
o1E78
o9
...etc
怎么可能呢?浏览 C# 代码(上面的第二个链接),我发现在某些时候,代码创建了几个 GUID 对象,每个对象都有一些略有不同的参数:
// Identify the property to retrieve
var property = new _tagpropertykey();
property.fmtid = new Guid(0x26D4979A, 0xE643, 0x4626, 0x9E, 0x2B,
0x73, 0x6D, 0xC0, 0xC9, 0x2F, 0xDC);
property.pid = 12;
[...]
// Get the name of the object
string name;
var property = new _tagpropertykey();
property.fmtid = new Guid(0xEF6B490D, 0x5CD8, 0x437A, 0xAF, 0xFC,
0xDA, 0x8B, 0x60, 0xEE, 0x4A, 0x3C);
property.pid = 4;
[...]
// Get the type of the object
property = new _tagpropertykey();
property.fmtid = new Guid(0xEF6B490D, 0x5CD8, 0x437A, 0xAF, 0xFC,
0xDA, 0x8B, 0x60, 0xEE, 0x4A, 0x3C);
property.pid = 7;
[...]
var folderType = new Guid(0x27E2E392, 0xA111, 0x48E0, 0xAB, 0x0C,
0xE1, 0x77, 0x05, 0xA0, 0x5F, 0x85);
var functionalType = new Guid(0x99ED0160, 0x17FF, 0x4C44, 0x9D, 0x98,
0x1D, 0x7A, 0x6F, 0x94, 0x19, 0x21);
但我无法弄清楚这些十进制值是如何工作的。在线文档似乎很少。我在设备管理器 ({eec5ad98-8080-425f-922a-dabf3de3f69a}
),但每次我尝试用我自己的替换其中一个 guid 时,我都会收到 COMException。
我找对地方了吗?我是否需要设置一些 GUID 或其他东西?
我将这个问题标记为 C# 和 C++,因为我在这两种语言中找到了一些代码示例,但我愿意用任何语言(java、python、...)解决问题
最佳答案
郑重声明,我最终使用了一些可怕的 hack 来解决我的问题。因为我知道存储我要查找的文件的路径,所以我使用了 Christophe Geer 博客中的 EnumerateContent
函数,并进行了修改以检查当前文件夹是否具有我要查找的名称:
例如,如果我感兴趣的文件在 Sd Card/path/to/directory/
中,那么我会这样修改代码:而不是调用方法 EnumerateContents
,我调用方法 EnumerateContentsInTargetDirectory
:
private static void EnumerateContentsInTargetDirectory(ref IPortableDeviceContent content, PortableDeviceFolder parent)
{
// Get the properties of the object
IPortableDeviceProperties properties;
content.Properties(out properties);
// Enumerate the items contained by the current object
IEnumPortableDeviceObjectIDs objectIds;
content.EnumObjects(0, parent.Id, null, out objectIds);
uint fetched = 0;
do
{
string objectId;
objectIds.Next(1, out objectId, ref fetched);
if (fetched > 0)
{
var currentObject = WrapObject(properties, objectId);
if (currentObject is PortableDeviceFolder)
{
if (currentObject.Name.Equals("SD Card") || currentObject.Name.Equals("path") || currentObject.Name.Equals("to"))
{
parent.Files.Add(currentObject);
EnumerateContentsInTargetDirectory(ref content, (PortableDeviceFolder)currentObject);
}
else if (currentObject.Name.Equals("directory"))
{
parent.Files.Add(currentObject);
// This is the same original method of Christophe Geer.
EnumerateContents(ref content, (PortableDeviceFolder)currentObject);
}
}
}
} while (fetched > 0);
关于c# - 如何使用 USB 和/或 WPD 将文件从 Android 设备传输到 PC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30137503/
我想通过 IPortableDeviceValues 获取 WPD 上图像文件的宽度和高度。 根据Windows Dev Center每个类型为 WPD_CONTENT_TYPE_IMAGE 的对象(
以下 uid 是随机生成的还是我需要从某个地方找到它,如果是的话从哪里找到?来自 header stdafx.h // This method submits a ReadMeasurement re
编辑:请求了完整的源代码。下面是一个准系统实现,以复制该错误。 删除了内容枚举,但无论如何都会在第一个对象调用时发生崩溃。在这种情况下,WPD_DEVICE_OBJECT_ID 对象。 LINK TO
我正在为当前使用 Windows Image Acquisition (WIA) 的应用程序添加 Windows 可移植设备 (WPD) 支持。 WIA 通过 IWiaItem::DeviceDlg
我的 Android 应用程序生成一些文件,我需要将这些文件与我的主 PC 程序同步,反之亦然。我执行此操作的常用方法是使用 FTP 帐户,我的 Android 应用程序和我的 PC 程序都可以在其中
在我的项目中,我使用 Windows 可移植设备 (WPD) API 来枚举移动设备的内容。 WPD API Enumeration Guide .我能够枚举每个对象并查看它们的属性,如 API 编程
我需要枚举 MTP android 设备的内容并将文件从设备传输到 Windows PC。 按照此处找到的指南 Transferring Content from a Device to a PC我试
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
我想通过 MTP 将至少一个文件复制到 Windows Phone。按照本教程,我可以连接到手机并将文件从手机复制到计算机: WPD: Transferring Content但是我无法以相反的方式复
WPD在 Windows XP(如果重要的话是 SP1)上不能正常工作,即使 Microsoft states it does . WPD 问题: IPortableDeviceManager.Get
我找不到任何关于将 .wpd 文件(WPS SAS 表)导入 R 的内容。有谁知道如何在 R 中导入这些表? 我知道您可以使用外来和 Hmisc 库来导入 sas7bdat 文件,但到目前为止我还没有
我一直在尝试使用 WPD Apis 在 c# 中编写示例应用程序,以将图像文件传输到连接的 WPD 支持设备。我一直在关注THIS关联。我的问题是,每次我尝试传输文件时,我都会收到错误消息:值不在预期
我正在编写一个程序来自动执行一些在检测到可移动设备时必须完成的任务。最初仅使用文件流。当我意识到并非所有可移动设备都可以通过这种方式访问时,我开始使用 SHFileOperation,但现在我意识
我正在开发一个在 Windows 上运行的 PC C++ 应用程序。该应用程序应使用 MTP 与通过 USB 连接的安卓手机进行通信。本意是不挂载存储卡。我发现 Windows 有支持 MTP 的 W
我想编写一个应用程序,将 MP3 文件复制到 SanDisk Sansa M240。 SanDisk 没有驱动器盘符,使用 MTP 进行文件传输。我偶然发现了连接到设备的示例:http://blogs
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 9 年前。 Improve t
是否有任何可用于 VB.net 的库使我能够轻松访问 MTP 设备?我希望能够找出连接了哪些设备,列出它们的内容并在它们之间复制文件。 到目前为止,我所看到的一切(无论是在 Stack Overflo
问题已使用 NuGet 包 PortableDevices 进行测试,解决方案来自此处:Accessing an MTP device in Visual Basic .NET 我想从三星 Andro
我正在尝试通过电缆将 android 设备连接到(Windows 7 64 位)PC,然后以编程方式将一些文件从 android 检索到 pc。 (注意:我需要这个用于特定设备,Moverio BT-
我是一名优秀的程序员,十分优秀!