zoukankan      html  css  js  c++  java
  • android 备份问题--转载

    要实现类似碗豆夹这类的与pc应用进行通讯备份通讯录,短信,应用,并对这些信息进行编辑的功能。
    这里主要用到了 adb,socket,pc 应用通过 usb 联接 android 然后通过发送广播来启动 android 里的服务器端程序。
    这是采用 c/s 的通讯模式,android 端应用是服务器,pc端的是客户端。pc应用启动android端后通过 tcp 协议进行
    通讯。

    一、获取与电脑连接的所有手机,在前面VC++文章也有提到获取方法。这里只介绍JAVA的。其实都一样。用的是ADB命令。。。

    public static List<Device> findDevices(){
    List<Device>devices = new ArrayList<Device>();
    String str = null;
    int port = 15000;
    Process process = null;
    Device device = null;
    String[] deviceStr = new String[2];
    List<String>lines=new ArrayList<String>();
    try {
    process = Runtime.getRuntime().exec("adb 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);
    deviceStr = str.split(" ");
    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;
    }


    二、端口映射;启动手机端的app

    public static void portForwardBydevice(Devices device){
    String a = null;
    String b = null;
    String c = null;
    String d = null;
    Log logger = LogFactory.getLog(DeviceFinder.class);

    a = "adb -s " + device.getDeviceId()+ " shell am broadcast -a NotifyServiceStop";
    b = "adb -s " + device.getDeviceId() + " forward tcp:"+device.getPort()+" tcp:12222";
    c = "adb -s " + device.getDeviceId()+ " shell am broadcast -a NotifyServiceStart";
    d= "adb -s " + device.getDeviceId()+ " shell am start -n com.newland.realmobiledetection/com.newland.realmobiledetection.system.activity.WelcomeActivity";
    logger.error("......device...a.."+a);
    logger.error("......device...b.."+b);
    logger.error("......device...c.."+c);
    logger.error("......device...d.."+d);
    try {
    Runtime.getRuntime().exec(d);
    Thread.sleep(1000);
    Runtime.getRuntime().exec(a);
    Thread.sleep(1000);
    Runtime.getRuntime().exec(b);
    Thread.sleep(1000);
    Runtime.getRuntime().exec(c);
    Thread.sleep(1000);
    logger.error("端口映射完成。。");
    } catch (IOException e) {

    logger.error("与手机通信异常"+e.getMessage());
    }catch (InterruptedException e) {
    logger.error("线程中断异常"+e.getMessage());
    }

    }


    三、连接:

    try {
    InetAddress serverAddr = null;
    serverAddr = InetAddress.getByName("127.0.0.1");
    socket = new Socket(serverAddr, pcPort);
    socket.setKeepAlive(true);
    socket.setSoTimeout(120 * 1000);
    BufferedOutputStream out = new BufferedOutputStream(socket.getOutputStream());
    BufferedInputStream in = new BufferedInputStream(socket.getInputStream());
    out.write(requestContent.getBytes());
    out.flush();
    responseContent=readFromSocket(in);
    System.out.println(":::::::::::::receive::::::::::::" + responseContent);
    logger.info(":::::::::::::receive::::::::::::" +responseContent);
    obj = gson.fromJson(responseContent, method.getGenericReturnType());


    手机端app);

    serverSocket =new ServerScoket(12222);

    Socket socket = serverSocket.accept();

    out = new BufferedOutputStream(socket.getOutputStream());
    in = new BufferedInputStream(socket.getInputStream());


    实现方式就是C/S架构,你可以把服务端写成一个安卓的服务,然后可以自动处理各种客户端的命令。

  • 相关阅读:
    jxl将list导入到Excel中供下载
    秒转为时分秒格式js
    秒转为时分秒格式
    加载样式js
    myeclipse:web项目不能显示Web App Libraries
    myeclipse出现src作为报名一部分src.com.*
    top命令
    Linux编写一个C程序HelloWorld
    前端jsp页面script引入url项目名使用${appName}
    流量监控iftop安装-CentOS7
  • 原文地址:https://www.cnblogs.com/tuotuteng/p/4881062.html
Copyright © 2011-2022 走看看