admin 管理员组

文章数量: 887019

当使用数据线把手机插入到电脑以后,可以获取到手机的设备标识,即deviceId。通过deviceID,使用adb命令,就可以和指定的手机进行数据的传输。

使用adb命令可以使用电脑往指定的手机上push数据,也可以pull指定手机上的数据。

代码如下:

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.util.ArrayList;

import java.util.List;

import com.szh.model.Device;

public class CopyFile {


    public static void main(String[] args) {

        // 使用adb把手机端文件拷贝到电脑以及把电脑文件拷贝到手机

        // 首先获取设备信息

        List<Device> devices = findDevices();

        // 遍历设备的id

        for (int i = 0; i < devices.size(); i++) {

            // 获取id

            String tempId = devices.get(i).getDeviceId();

            // 使用adb往手机端推送文件

            try {

                // 电脑从手机上拉文件

                Runtime.getRuntime() .exec("adb -s " + tempId + " pull sdcard/ucliulanqi.apk D:\\");

                System.out.println("adb -s " + tempId + " pull sdcard/hello.txt D:\\");

                // 从电脑上推送文件到手机

                Runtime.getRuntime().exec( "adb -s " + tempId + " push D:\\demo\\hello.txt sdcard/");

                System.out.println("adb -s " + tempId + " push D:\\demo\\hello.txt sdcard/");

                // 把整个文件夹拉到PC端

                Runtime.getRuntime().exec("adb pull sdcard/temp D:\\");

                System.out.print("adb pull sdcard/temp D:\\");

            } catch (Exception e) {

                e.printStackTrace();

            }

        }

    }


    // 发现手机里的设备

    public static List<Device> findDevices() {

        List<Device> devices = new ArrayList<Device>();

        String str = null;

        int port = 15000;

        Process process = null;

        Device device = null;

        List<String> lines = new ArrayList<String>();

        try {

            process = Runtime.getRuntime().exec("E:/android/sdks/platform-tools/adb.exe devices");

            InputStream in = process.getInputStream();

            BufferedReader read = new BufferedReader(new InputStreamReader(in));

            while ((str = read.readLine()) != null) {

                lines.add(str);

                System.out.println(str);

            }

            for (int i = 1; i < lines.size() - 1; i++) {

                str = lines.get(i);

                String[] deviceStr = str.split("\t");

                if ("device".equals(deviceStr[1])) {

                    device = new Device();

                    device.setDeviceId(deviceStr[0]);

                    device.setState(deviceStr[1]);

                    // 目前先指定port;

                    device.setPort(port);

                    port++;

                    devices.add(device);

                }

            }

        } catch (IOException e) {

            e.printStackTrace();

        }

        return devices;

    }

}


======================================

model如下:

package com.szh.model;


public class Device {

    String deviceId;

    String state;

    int port;

    public String getDeviceId() {

        return deviceId;

    }

    public void setDeviceId(String deviceId) {

        this.deviceId = deviceId;

    }

    public String getState() {

        return state;

    }

    public void setState(String state) {

        this.state = state;

    }

    public int getPort() {

        return port;

    }

    public void setPort(int port) {

        this.port = port;

    }
}

有一点需要注意的是

1:通过adb获取手机设备id的时候,如果你的adb没有单独配置环境变量,通过"adb devices"这种操作是获取不到设备id的。我当时查资料的时候,看到网上有些使用adb devices获取的,但是因为我没有单独配置adb,所以这种方法并不好使。后来我通过绝对路径才获取成功。

本文标签: 离线 数据线 命令 状态 数据