executeShellCommand выполняет команду на устройстве, которое вы автоматизируете. Это UiAutomator эквивалент "adb shell <command>
". Однако, чтобы отправить файл на такое устройство, вы должны выполнить его на локальном компьютере (где находится файл), так как устройство ничего об этом не знает.
Среды автоматизации, такие как Appium , уже предоставляют простую функцию для отправки файлов, но я не смог найти ничего похожего для низкоуровневого UiAutomator. Ваш самый простой выбор - вызвать adb push вручную:
ProcessBuilder pb = new ProcessBuilder("adb", "-s", "DEVICE_UDID", "push", "music\\testing.mp3", "/sdcard/Music");
Process pc = pb.start();
pc.waitFor();
(источник)
Обязательно замените DEVICE_UDID
идентификатором вашего устройства (как показано на устройствах adb). В качестве альтернативы, если к вашему компьютеру подключено только одно устройство, вы можете удалить "-s", "DEVICE_UDID"
из команды, оно будет считать ваше подключенное устройство в качестве цели вашей команды.