问题标签 [mtp]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
5847 浏览

c# - .Net MTP / PTP 包装器?

我正在编写一个业余项目来处理相机上的文件。以前我发现相机和 FolderBrowserDialog有问题。

我认为令人高兴的是相机正在使用 MTP 或 PTP(图片传输协议不是点对点)。

为了使与相机的接口更加无缝,我想使用 PTP 或 MTP 来访问相机。是否有任何用于 .Net 的 MTP / PTP 包装器可以推荐?如果可能的话,我很想避免自己编写或涉足非托管代码。

0 投票
2 回答
1988 浏览

android - 与 Android 平板电脑刷新 MTP 连接?

我使用 USB 电缆将三星 Galaxy Android 平板电脑连接到运行 Windows 7 的计算机。它使用 MTP 连接。

  • 步骤 1. 通过 Windows 资源管理器将我的 SQLite 数据库从 Windows 7 复制到平板电脑。
  • 步骤 2. 在平板电脑上打开它(添加 android_metadata 表),然后关闭它。
  • 步骤 3. 将 SQLite 数据库复制回 Windows。
  • 步骤 4. 使用 sqlite3.exe 检查它。这是腐败的。

现在进行另一个测试。

  • 步骤 1. 通过 Windows 资源管理器将我的 SQLite 数据库从 Windows 7 复制到平板电脑
  • 步骤 2. 断开然后重新连接 USB 电缆。
  • 步骤 3. 在平板电脑上打开它(添加 android_metadata 表),然后关闭它。
  • 步骤 3. 将 SQLite 数据库复制回 Windows。
  • 步骤 4. 使用 sqlite3.exe 检查它。它没有腐败。

有趣的是,如果我切换步骤 2 和 3,它也可以工作。

由于它在我断开并重新连接 USB 电缆时起作用,我猜我需要以某种方式刷新 MTP 缓存。这是如何实现的,或者是否有一个 API 可以用来快速断开和重新连接设备?

我实际的 Windows 应用程序使用 WPD(Windows 便携式设备)API,我只是在使用 Windows 资源管理器进行测试,以证明它在我的 Windows 代码中没有问题。我在 WPD 中看不到任何可以刷新的内容。

当 Android 上的 SQLite 数据库增长一页(或更多)时,似乎会发生该错误。SQLite 中的页面大小为 512 字节。查看 SQLite 数据库的二进制数据,我可以看到发生了什么。我在设备上使数据库大一页,将数据库从设备上复制下来,拔下 USB,插入,然后再次复制。比较这两个文件,我复制usb数据后得到的文件是一样的,只是最后有更多的数据。就像 MTP 不知道文件更大,直到您拔下 USB 并重新插入。如果您将 USB 插入其中,它只会复制上次复制文件时的字节数。

0 投票
1 回答
565 浏览

android - 如何使用 Android 的 MtpDevice 类将图像从 USB 相机复制到设备?

我正在尝试使用 android.mtp 包中的 MtpDevice 类将相机的内容复制到平板电脑(Motorola Xoom,Android 3.2)。我使用的具体方法是importFile(int objectHandle, String destPath)但不知何故它总是失败(方法返回 false)。

我使用 Environment.getExternalStorageDirectory() 作为 destPath 和我之前解析过的 objectHandle。

任何信息都会有帮助。谢谢!

0 投票
0 回答
444 浏览

android - Android ICS MTP 只能同步 *.mpg 格式的视频文件?

尝试通过 MTP 将视频文件同步到 Galaxy Nexus,只能同步 *mpg 格式的视频,所有其他格式的视频文件同步出错 (C00D123E)。该错误代码表明该设备不支持视频格式。

这是一个已知的问题?

谢谢

0 投票
2 回答
561 浏览

.net - 将 OpenFileDialog.InitialDirectory 设置为 MTP 设备

我正在编写一个应用程序来从相机中获取图片,并希望打开一个 OpenFileDialog,并将其 InitialDirectory 设置为相机。

这工作正常:

但这些不会:

我认为这是因为它是一个 MTP 设备,而不是它的“真实目录名称”。有没有办法做到这一点?

谢谢

0 投票
1 回答
1184 浏览

android - 注意 Honeycomb 或更高版本 Android 的外部 USB 存储的变化

我有一台数码单反相机和一台运行 Android Honeycomb 的三星 Galaxy Tab。DSLR 使用 USB 电缆连接到平板电脑(通过 USB 套件在平板电脑上启用主机功能)。我希望在用户使用此外部相机拍照时收到通知,以便将此图像下载到平板电脑或对其执行其他操作,例如显示包含从图像中获取的元信息的 Toast 通知。

据我所知,所有现有工具(例如FileObserver使用底层inotify机制MediaContentProvider等)都允许监视更改,要求监视特定文件或文件系统路径。这已经足够好了,直到我们在 2.x 和更早的 Android 版本中获得块层协议支持 - 当您连接设备时,它已安装在设备文件系统的某个位置,您可以将此安装点用作这些工具的观察点.

由于 Honeycomb Google 已将访问外部 USB 设备的方式更改为Media Transfer ProtocolwithPTP作为其子集。现在,当我将外部 USB 设备连接到 Android 设备时,我不会看到它的任何挂载点(我正在使用adb shell后续mount命令来获取它们)。此外,MTP实现使用的存储 id 显然充当更高级别的抽象,并且只是普通的整数值。我希望有一种方法可以以某种方式将这些存储 id 转换为真实路径/挂载点/任何东西,但显然似乎没有。

考虑到MediaScanner已经在我的设备上运行的 Android,我猜想它可以Intent在设备可访问的媒体文件发生变化时通过特殊广播来解决这个问题,所以我开始寻找已经存在并适合Intents被通知的问题,但没有运气- 我发现只有在分别连接和断开设备时才广播ACTION_MEDIA_MOUNTEDACTION_MEDIA_REMOVED这意味着MediaScanner在您重新安装之前无法注意到设备上的任何更改(我已经使用股票图库应用程序仔细检查了它 - 在您拔下然后将其插入 Android 设备之前,它不会在相机上看到任何新创建的图像再次)。

试图为外部 sdcard 获取这个挂载路径,我使用Environment.getExternalStorageDirectory()了 API 调用,但它产生了模拟 Galaxy 的 sdcard 路径,而/mnt/sdcard不是相机的路径。所以它对我也不起作用。

我设法解决了这个问题,只是在启动定期Timer事件并AsyncTask充当TimerTask. 此任务确实初始化 USB 连接,打开设备,扫描整个设备内存,仅获取最后拍摄的照片,然后关闭设备描述符和 USB 连接。

考虑到它必须每次都执行所有这些操作,这看起来不是最好和最有效的方法,这可能非常频繁,比如每 5 或 10 秒。它肯定会很快耗尽电池电量并产生不必要的系统 I/O,仅用于拍摄最后一张照片并将其与上一张照片进行比较(99% 是相同的图像),但我还没有找到更好的工作解决方案这样做。最好有一个带有基于事件的通知的观察者机制。

所以我的问题是,有没有更有效的方式来通知 Honeycomb 或更高版本的 Android 的外部 USB 存储的变化,而不是上面描述的?

0 投票
4 回答
15072 浏览

python - 如何使用 python 访问 MTP USB 设备

如何在 python 中通过 USB 电缆使用 MTP 读取和写入我的 Galaxy Nexus 手机?我在 Windows 7 电脑上。

0 投票
1 回答
618 浏览

c++ - 如何获取给定 PIDL 的 IWMDMStorageControl 接口

我使用 SHBrowseForFolder() 在 MTP 设备上选择一个文件夹。然后我想从那里复制文件。IWMDMStorageControl 接口(来自 Windows Media Format 11 SDK)似乎很合适,但是如何从 SHBrowseForFolder() 返回的带有 PIDL 的对象获取它?

(我问过关于获取 IWMDMStorageControl 接口的类似问题:How to get IPortableDeviceContent interface for given PIDL

0 投票
1 回答
635 浏览

c++ - 如何获取给定 PIDL 的 IPortableDeviceContent 接口

我使用 SHBrowseForFolder() 在 MTP 设备上选择一个文件夹。然后我想从那里复制文件。IPortableDeviceContent 接口(来自 Windows Portable Devices SDK)似乎很合适,但是如何从 SHBrowseForFolder() 返回的带有 PIDL 的对象获取它?

(我问过关于获取 IWMDMStorageControl 接口的类似问题: How to get IWMDMStorageControl interface for given PIDL

0 投票
2 回答
2564 浏览

android - android 代码中存储了手机的名称/型号,它是如何存储在那里的?

我想知道的是 Android 手机在连接为MTP时如何发布它的名称,以便它出现在我的计算机上。我相信mtp/usb驱动程序从上层获取价值,例如框架层中的mtp/usb java 类。我想尝试通过 Android 代码本身更改出现在计算机上的名称。

提前致谢。