Извлечение файла Android с SD-карты с использованием Java - PullRequest
1 голос
/ 16 февраля 2012

Я хочу вытащить файл с SD-карты Android (эмулятор или устройство) и поместить его на диск C: \.

Как я могу сделать это на Java? в командной строке я просто набираю:

C: \ Users \ ME \ android-sdks \ platform-tools \ adb.exe pull /sdcard/test_1329402481933.jpg c: \

Так что в Java я думал, что это будет что-то вроде:

 Runtime rt = Runtime.getRuntime();
     Process pr = rt.exec("C:\\Users\\ME\\android-sdks\\platform-tools\\adb.exe pull /sdcard/test_1329402481933.jpg c:\\");

     int exitVal = pr.waitFor();
     System.out.println("Exited with error code "+exitVal);

но он не может дать мне этот след:

java.io.IOException: Ошибка при запуске exec (). Команды: [C: \ Users \ ME \ android-sdks \ platform-tools \ adb.exe, тянуть, /sdcard/test_1329402481933.jpg, c:] Рабочий каталог: ноль Окружающая среда: ноль в java.lang.ProcessManager.exec (ProcessManager.java:196) в java.lang.Runtime.exec (Runtime.java:225) в java.lang.Runtime.exec (Runtime.java:313) в java.lang.Runtime.exec (Runtime.java:246) в com.blinkbox.client.test.MyTest.takeScreenShot (MyTest.java:138) в com.blinkbox.client.test.MyTest.testCanOpenSettings (MyTest.java:66) в java.lang.reflect.Method.invokeNative (родной метод) в android.test.InstrumentationTestCase.runMethod (InstrumentationTestCase.java:205) в android.test.InstrumentationTestCase.runTest (InstrumentationTestCase.java:195) в android.test.ActivityInstrumentationTestCase2.runTest (ActivityInstrumentationTestCase2.java:175) на android.test.AndroidTestRunner.runTest (AndroidTestRunner.java:169)

на android.test.AndroidTestRunner.runTest (AndroidTestRunner.java:154) в android.test.InstrumentationTestRunner.onStart (InstrumentationTestRunner.java:430) в android.app.Instrumentation $ InstrumentationThread.run (Instrumentation.java:1447) Вызвано: java.io.IOException: в доступе отказано java.lang.ProcessManager.exec (собственный метод) в java.lang.ProcessManager.exec (ProcessManager.java:194) ... еще 19

Я открыт, чтобы сделать это совершенно по-другому ... Просто нужно сделать работу :))

Ответы [ 3 ]

2 голосов
/ 16 февраля 2012

ОТВЕТ 1: Я думаю, что ключ есть разрешение отказано

Попробуйте написать в другой каталог.

ОТВЕТ 2: Попробуйте "cmd / c ..."

String[] args = {"cmd", "/c", "\"C:\\Users\\ME\android-sdks\\platform-tools\\adb.exe pull /sdcard/test_1329402481933.jpg c:\\test\"",};
Runtime rt = Runtime.getRuntime();
ProcessBuilder pb = new ProcessBuilder(args);
Process pr = pb.start();  
0 голосов
/ 01 мая 2016

Из стека трассировки [AndroidTestRunner] предположим, что вы запускаете его через ide.Попытайтесь запустить ваш ide как администратор, чтобы выяснить, в этом ли проблема.

0 голосов
/ 01 мая 2016
Here is a way to pull a file from an Android. You will need to use ddmlib to find the device.

import com.android.ddmlib.IDevice;
import com.android.ddmlib.SyncService;

    void pullFile(IDevice device, String file, String remotePath, String localPath) {
        SyncService service = getSyncService(device);
        try {
            service.pullFile(
                      remotePath + file
                    , localPath + file
                    , SyncService.getNullProgressMonitor());
        } catch (SyncException | TimeoutException | IOException e) {
            log.error("pull " + file + ":" + e.getMessage());
        }
    }


...