桌面java应用程序通过USB复制和传输android数据

2023-12-02

我有一个桌面java应用程序,还有一个android应用程序。两个应用程序一起工作。

桌面应用程序中的用户有一个按钮可以启动设备数据应用程序到计算机应用程序之间的传输,反之亦然。

所以我需要用一根简单的USB线传输数据,而不需要互联网连接/WiFi/蓝牙/adb。

我找到了两个适用于 Windows 的 Java MTP 库来解决我的问题,以及 Android 的 USB 主机/配件功能:

  • jMTP成功识别我的 Android 设备、文件夹和其他内容

    我成功地在计算机 ---> 设备中传输文件,但是当我尝试在设备 ---> 计算机中传输文件时出现错误

    我把我的代码放在解释后面。

  • jusbpmp但我无法转移设备--->计算机。

  • USB 主机/配件没有用,因为传输是从桌面应用程序启动的,当我在 Android 开发人员指南网站上阅读时,它似乎与我需要的不符,或者如果用户开始从设备传输。

我尝试用 1 周的时间来成功完成这项任务,但似乎我需要帮助。

Java+jMTP代码

private static void jMTPeMethode() 
        {
            PortableDeviceManager manager = new PortableDeviceManager();
            PortableDevice device = manager.getDevices()[0];
            // Connect to USB tablet
            device.open();

            System.out.println(device.getModel());

            System.out.println("---------------");

            // Iterate over deviceObjects
            for (PortableDeviceObject object : device.getRootObjects()) 
            {
                // If the object is a storage object
                if (object instanceof PortableDeviceStorageObject) 
                {
                    PortableDeviceStorageObject storage = (PortableDeviceStorageObject) object;

                    for (PortableDeviceObject o2 : storage.getChildObjects()) 
                    {
                        if(o2.getOriginalFileName().equalsIgnoreCase("Test"))
                        {

                            //Device to computer not working
                            PortableDeviceToHostImpl32 copy = new PortableDeviceToHostImpl32();
                            try 
                            {
                                copy.copyFromPortableDeviceToHost(o2.getID(), "C:\\TransferTest", device);
                            } catch (COMException ex) 
                            {

                            }

    //                      //Host to Device working
    //                      BigInteger bigInteger1 = new BigInteger("123456789");
    //                      File file = new File("c:/GettingJMTP.pdf");
    //                      try {
    //                          storage.addAudioObject(file, "jj", "jj", bigInteger1);
    //                      } catch (Exception e) {
    //                          //System.out.println("Exception e = " + e);
    //                      }
                        }
                        System.out.println(o2.getOriginalFileName());
                    }
                }
            }

            manager.getDevices()[0].close();
        }

这是代码和错误的结果

`

    Nexus 9
    ---------------
    Music
    Podcasts
    Ringtones
    Alarms
    Notifications
    Pictures
    Movies
    Download
    DCIM
    Android
    ! Failed to get IStream (representing object data on the device) from IPortableDeviceResources, hr = 0x80070057
    test
    ReleveData

`

我在互联网上读到0x80070057是一个通用的Windows异常。

Edit:

Windows 网站说对于人力资源错误 错误_无效_参数0x80070057: 应用程序提供的参数无效。

但我没有看到女巫参数无效


这里是link库的 C 类用于将数据设备传输到计算机,您可以看到我的错误行 230。

这是我使用的 jMTP 库。

你能帮助我,或者用其他方式来做我需要的事情(Usb4Java,libUSB)吗?我将非常感激。

提前致谢。


好吧,我发现问题了。

问题来自于o2.getID()给方法的参数copy.copyFromPortableDeviceToHost.

Because o2代表文件夹,而不是文件夹中的文件,因此无法发送文件夹,为了成功,我需要发送文件夹中的文件。

所以我投了我的PortableDeviceObjecto2 到PortableDeviceFolderObject,这样就可以得到子对象的列表targetFolder.getChildObjects() in the PortableDeviceFolderObject代表文件',然后我可以迭代文件夹中的任何子对象。

对于每个文件,我调用方法copy.copyFromPortableDeviceToHost,具有正确的 ID。

这是更正代码,将文件从计算机复制/传输到设备以及从设备复制/传输到计算机。

我希望它有帮助。

public class USBTransfertMain {

    public static void main(String[] args) throws Throwable {
        jMTPeMethode();
    }

    private static void jMTPeMethode() 
    {
        PortableDeviceFolderObject targetFolder = null;
        PortableDeviceManager manager = new PortableDeviceManager();
        PortableDevice device = manager.getDevices()[0];
        // Connect to USB tablet
        device.open();
        System.out.println(device.getModel());

        System.out.println("---------------");

        // Iterate over deviceObjects
        for (PortableDeviceObject object : device.getRootObjects()) 
        {
            // If the object is a storage object
            if (object instanceof PortableDeviceStorageObject) 
            {
                PortableDeviceStorageObject storage = (PortableDeviceStorageObject) object;

                for (PortableDeviceObject o2 : storage.getChildObjects()) 
                {
                    if(o2.getOriginalFileName().equalsIgnoreCase("testFolder"))
                    {
                        targetFolder = (PortableDeviceFolderObject) o2;
                    }

                    System.out.println(o2.getOriginalFileName());
                }

                copyFileFromComputerToDeviceFolder(targetFolder);
                PortableDeviceObject[] folderFiles = targetFolder.getChildObjects();
                for (PortableDeviceObject pDO : folderFiles) {
                    copyFileFromDeviceToComputerFolder(pDO, device);
                }

            }
        }

        manager.getDevices()[0].close();
    }

    private static void copyFileFromDeviceToComputerFolder(PortableDeviceObject pDO, PortableDevice device)
    {
        PortableDeviceToHostImpl32 copy = new PortableDeviceToHostImpl32();
        try {
            copy.copyFromPortableDeviceToHost(pDO.getID(), "C:\\TransferTest", device);
        } catch (COMException ex) {
            ex.printStackTrace();
        }

    }

    private static void copyFileFromComputerToDeviceFolder(PortableDeviceFolderObject targetFolder) 
    {
        BigInteger bigInteger1 = new BigInteger("123456789");
        File file = new File("C:\\GettingJMTP.pdf");
        try {
            targetFolder.addAudioObject(file, "jj", "jj", bigInteger1);
        } catch (Exception e) {
            System.out.println("Exception e = " + e);
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

桌面java应用程序通过USB复制和传输android数据 的相关文章

  • PhoneGap BarcodeScanner - ClassNotFound

    UPDATE 2 我发布了一个解决我原来问题的答案 看欲了解更多信息 https stackoverflow com a 9541490 398519 UPDATE供任何想知道的人参考 最后我发现了这个 http github com co
  • JavaFX 动画使用循环?

    我正在尝试制作一款类似太空侵略者的游戏 我画了一个正方形 我想通过使用循环逐步向下移动它thread sleep 然而 正方形立即被绘制出来 我知道有可以使用的动画路径 但我想保持低水平并仅使用坐标系 有没有办法使用这样的循环来制作时间轴动
  • 在 Android 上获取一个滚动到 GridView 底部视图的按钮

    我正在尝试将现有的 iPhone 应用程序移植到 Android 我希望有一个按钮滚动到 GridView 底部的视图中 以使用户能够从服务器加载更多数据 目前 我的解决方案只是修复屏幕底部的一个按钮 而不是让它滚动到视图中 这是我的布局代
  • 评级栏更改星星颜色而不使用自定义图像

    有什么办法可以改变星星的颜色吗 我不想使用自定义图像来实现它 您可以将这些行添加到创建方法中 RatingBar ratingBar RatingBar findViewById R id ratingBar LayerDrawable s
  • Android 模拟器问题

    当我启动模拟器时 我遇到很多问题 错误 HttpConnectionApp emulator 5554 disconnected Cancelling net paxcel http HttpConnectionApp activity l
  • Android:UiTesting 时运行时错误

    我正在尝试运行 Ui 测试 每次运行应用程序时 它都会在控制台中出现以下错误并关闭正在运行的应用程序 我导入了 uiautomator jar android jar 和 JUnit4 库 我正在使用 Eclipse 我在这里缺少什么 20
  • Android - 框架布局高度与协调器布局不匹配

    我的 FrameLayout 抽屉布局中的容器 有问题 FrameLayout的高度超过了屏幕高度 在底部的android默认菜单按钮下方
  • 如何获取 Android 应用程序的 Google Places API 密钥

    在过去的 48 小时里 我绞尽脑汁试图找到这个问题的答案 问这个问题的人 如何为 Google Places api 制作 API KEY https stackoverflow com questions 23128152 how can
  • APACHE POI 从 Java 中的 Excel 获取精确的字体颜色

    在 Excel 工作表中 如何使用 Java 中的 Apache POI 获取准确的字体颜色值 我试图通过使用来获取字体颜色 org apache poi ss usermodel Font f book getFontAt style g
  • Flutter 图像选择器明确请求许可

    图像选择器包说 无需配置 该插件应该开箱即用 不再需要添加 android requestLegacyExternalStorage true 作为属性 AndroidManifest xml 中的标记 如 image picker 所示
  • 使用泛型进行选择排序

    我对整数进行了选择排序并且它正在工作 当我尝试修改程序以使用泛型时 编译器会抱怨 我不知道如何修复它 如果有人能提出一些建议和建设性意见 我将不胜感激 这是代码 public class SelelctionSort public stat
  • 使用 Lint 和 SonarQube 分析 Android 项目

    我真的 溢出 了试图让这些东西一起工作 我按照这里的指示进行操作 http docs sonarqube org display PLUG Android Lint Plugin http docs sonarqube org displa
  • 如何使 RSACryptoServiceProvider 在没有填充(nopadding)的情况下工作?

    我需要使 C 应用程序与 Java 应用程序兼容 Java 应用程序使用Cipher getInstance RSA ECB nopadding 初始化器使密码 ECB 和无填充 但是 在 C 中 您有 2 个填充选项 OAEP 填充或 P
  • JavaFX 8 默认消息图标

    随着 JavaFX 的最近几次更新 我们收到了警报 我想获取消息的默认图标 错误 警告 在Swing中 我可以通过一些方式获取L F消息图标UIManager的属性 如何在 JavaFX 中获取消息的默认图标 它们是包含在属性中 还是由 C
  • 使用 OpenNLP 获取句子的解析树。陷入困境。

    OpenNLP 是一个关于自然语言处理的 Apache 项目 NLP 程序的目标之一是解析一个句子 并给出其语法结构的树 例如 天空是蓝色的 这句话 可能会被解析为 S NP VP The sky is blue where S是句子 NP
  • 用什么? MVC、MVP 或 MVVM 还是……?

    我将启动一个 Java 项目来开发桌面应用程序 使用什么作为表示层模式 MVC MVP MVVM 或 如果可能的话 举一些可行的小例子 Actually the ultimate post you re looking for is thi
  • 使用 Spring Batch 将文件中的日期解析为 LocalDateTime

    我正在尝试使用 Spring Batch 读取包含日期的 CSV 文件 但在将日期解析为LocalDateTime Object 字段 日期 上的对象 目标 中的字段错误 拒绝值 2017 07 20 04 15 25 0 代码 typeM
  • Java:如何检测(并更改?)System.console 的编码?

    我有一个在控制台上运行的程序 其变音符号和其他特殊字符在 Mac 上以 的形式输出 这是一个简单的测试程序 public static void main String args System out println h h System
  • 如何获取 res.drawable 文件夹的路径来复制文件?

    我正在编写我的应用程序AndroidStudio 我的里面有gif文件drawable gifs文件夹 我希望将该文件复制到MediaStore Images Media单击按钮后的文件夹 目前 即使使用发布的一些答案 我也无法获取我的 g
  • 带有客户端证书的android webview

    我尝试了几天使用嵌入在应用程序中的客户端证书的Web视图 但在我看来 android sdk没有提供任何方法来做到这一点 是否有回调来拦截服务器发送的质询 有没有办法将 webview 与客户端证书一起使用并发出 https 请求 因为我也

随机推荐

  • 获取文件编码[重复]

    这个问题在这里已经有答案了 可能的重复 检测 PHP 中的文件编码 我怎样才能用 PHP 找出文件的编码是什么 对于除 utf 8 之外的所有 8 位字符集来说 检测编码确实很困难 因为并非每个 8 位字节序列都是有效的 utf 8 并且通
  • 在 R 中转换 1970 年 1 月 1 日之前的日期

    我正在尝试将一列日期转换为 R 中的 Date 对象 但我似乎无法获得所需的结果 这些人的出生日期在 1970 年 1 月 1 日之前 所以当我使用as Date例如 R 将 1 12 54 等日期转换为 2054 01 12 我该如何解决
  • 当我的测试在 Eclipse 中扩展 TestCase(Junit) 时,无法使用 @Test 注释执行测试

    当我的测试在 Eclipse 中扩展 TestCase Junit 时 无法使用 Test 注释执行测试 当我不从 TestCase jUnit 扩展时 它工作得很好 但我现有的代码从 TestCase 扩展 因此我想保持原样 检查您是否没
  • 应用程序启动时仅运行后台服务

    我只想在应用程序启动时启动服务 这是我的代码 我的服务类别 public class MyService extends Service Override public int onStartCommand Intent intent in
  • 递归遍历控件在OnInit中禁用GridView RowCommand并丢失Viewstate

    如果我递归地遍历页面的控件 则 GridView 中的 LinkBut ton 不再触发 RowCommand 事件 事实上 看起来 GridView 的 ViewState 丢失了 为什么 我该如何解决这个问题 下面的代码将正常工作 直到
  • ZF2:如何为dispatch.error附加模块特定侦听器

    有没有办法为该事件附加一个事件侦听器dispatch error在 Zend Framework 2 中 该侦听器将仅附加到与 Module php 相关的 EventManager 我通过附加监听器来实现这一点dispatch到全局 Sh
  • jQuery Mobile 中的粘性列表分隔线?

    有没有办法让 jQuery Mobile 列表分隔符标题固定 粘在页面顶部 直到下一个字母或列表分隔符出现并取代它的位置 我已经发现了这样的事情 https github com jquery jquery mobile blob mast
  • 从文本字符串中提取数字的公式

    如何从 Excel 或 Google Sheets 中的文本字符串中仅提取数字 例如 A1 a1b23eg67 A2 15dgrgr156 想要的结果是 B1 12367 B2 15156 您可以使用 Google 表格中的捕获组来完成此操
  • 使用 TObject 后代调用 std::vector::push_back 时,C++ Builder bcarm 错误

    我有一些简单的 C 代码 无法由 C Builder 10 1 Berlin 的基于 Clang 的 C 11 编译器 bccaarm 编译 这是代码 TComponent Comp new TComponent this std vect
  • Android:无法根据需要正确设置 TableLayout

    我在活动中显示来自数据库的数据 我想要一个桌子和底部的按钮 对于数据来说 TableLayout 是最好的选择 我将 TableLayout 添加到 Horizo ntalView 和 ScrollView 中 使其垂直和水平滚动 动态添加
  • 当 value 是 cls 的实例时,您可以注释返回类型吗?

    给定一个带有初始化辅助方法的类 class TrivialClass def init self str arg str self string attribute str arg classmethod def from int cls
  • 模拟器无法启动

    我只需安装 HAXM 安装程序和 Android SDK 工具 最后我的 AVD 就可以启动了 但问题是它在android上卡住了 我已经等了20分钟了 但还没开始 模拟器 设备 fd 664 HAXM 正在工作并且模拟器在快速 virt
  • asp dropdownlist - 将数字 1-15 添加到列表

    有没有一种方法可以将值 1 15 添加到 asp 下拉列表中 而不必单独执行每个值 我目前有 ddlAdults Items Insert 0 new listitem 1 1 ddlAdults Items Insert 1 new li
  • 如何从 MediaSessionManager 创建 MediaController 实例?

    我正在尝试从 RemoteController 迁移到 Lollipop 的 MediaController 但在获取 MediaController 实例时遇到问题 在 MediaController 中它说 如果您拥有 android
  • React 组件中的错误 - 无法验证用户注册

    当我尝试注册新用户时 在用户注册代码中 即使输入相同的密码 我不断收到 密码不匹配 错误消息 我不明白我哪里出了问题 我请求你帮助理解我哪里出了问题 感谢您的帮助 过去几天我一直在努力解决这个问题 但是我一直无法找到解决方案 这是用户注册组
  • 如何在 PHP 中将此日期 (dd/mm/yyyy) 格式化为 (j M Y)? [关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我正在尝试将此日期格式 在 PHP 中 dd mm yyyy 例如 18 08 2011
  • for循环中的if else语句?

    在我为学校做的项目的最后部分 我应该使用if else里面的声明for循环 但我不知道该怎么做 我可以使用大量if else声明做同样的事情 但我认为我的老师不会欣赏它 这是作业最后部分的说明 计算等级 A B C D 或 F 并存储在另一
  • ServiceStack - 如何禁用默认异常日志记录

    符合ServiceStack 文档 我们有一个全局服务异常处理程序 文档说这个处理程序应该记录异常然后调用DtoUtils HandleException 像这样 private object LogServiceException obj
  • 使用 selenium webdriver python 从共享点下载文件

    我正在尝试从 sharepoint url 下载文件并将代码写入neverask savetodisk但仍然显示保存文件的对话框 我尝试了相同的代码 当我们单击其他 URL 的下载链接但无法使用共享点应用程序时 它可以工作 这是我使用的代码
  • 桌面java应用程序通过USB复制和传输android数据

    我有一个桌面java应用程序 还有一个android应用程序 两个应用程序一起工作 桌面应用程序中的用户有一个按钮可以启动设备数据应用程序到计算机应用程序之间的传输 反之亦然 所以我需要用一根简单的USB线传输数据 而不需要互联网连接 Wi