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架构,你可以把服务端写成一个安卓的服务,然后可以自动处理各种客户端的命令。

时间: 2024-10-10 23:52:17

android 备份问题--转载的相关文章

Myeclipse8.6配置android_SDK,进行android开发(转载)

Myeclipse8.6下部署环境,总结一下个人Android环境配置的过程(首先不要急着启动Myeclipse) 1.下载SDK:http://developer.android.com/sdk/index.html,具体版本由自己定义,本人下载的是android-sdk_r11-windows.zip. 2.下载ADT:本人使用这个版本Android ADT-0.9.7,官方下载地址:http://dl.google.com/android/ADT-0.9.7.zip 3.解压android

android经典Demo(转载)

一篇不错的资源博文,转载分享给大家: 1.Android团队提供的示例项目  如果不是从学习Android SDK中提供的那些样例代码开始,可能没有更好的方法来掌握在Android这个框架上开发.由Android的核心开发团队提供了15个优秀的示例项目,包含了游戏.图像处理.时间显示.开始菜单快捷方式等.  地址: http://www.apkbus.com/android-13506-1-1.html 2. Remote Droid  RemoteDroid是一个Android应用,能够让用户

Android SQLite总结[转载]

[转载] :http://blog.163.com/zqy216_2008/blog/static/4119371820119954812509/ 最近在做的项目涉及到了SQLite,大学时没有好好学习数据库,趁这次项目学习总结下. SQLite是一款轻量级数据库,它的设计目的是嵌入式,而且它占用的资源非常少,在嵌入式设备中,可能只需要几百KB,这也是 Android 系统采用 SQLite 数据库的原因之一. 下面给出SQLite的数据类型. 一般数据采用的固定的静态数据类型,而SQLite采

63、加速android应用(转载)

本文转自 http://www.devtf.cn/?p=1097 原文链接 : Speed up your app原文作者 : UDI COHEN译文出自 : 开发技术前线 www.devtf.cn.未经允许,不得转载!译者 : zijianwang90校对者:状态 : 完成 几周之前,我在Droidcon NYC上有过一次关于Android性能优化的演讲. 我在这个演讲中花费了大量的时间,因为我想通过真实的例子展现性能问题,以及我是通过什么样的工具去发掘这些问题的.因为时间原因,在演讲中我不得

android Looper.prepare()(转载)

Looper用于封装了android线程中的消息循环,默认情况下一个线程是不存在消息循环(message loop)的,需要调用Looper.prepare()来给线程创建一个消息循环,调用Looper.loop()来使消息循环起作用,从消息队列里取 消息,处理消息. 注:写在Looper.loop()之后的代码不会被立即执行,当调用后 mHandler.getLooper().quit()后,loop才会中止,其后的代码才能得以运行.Looper对象通过MessageQueue 来存放消息和事

android 动画(转载)

转载地址:http://www.cnblogs.com/qiengo/archive/2012/05/03/2480386.html Android Animation Contents: Animations Tween Animations AnimationSet Interpolator Frame-By-Frame Animations LayoutAnimationsController AnimationListener  Animations 一.Animations介绍 Ani

sql2005-数据库备份方案 (转载)

sql2005数据库备份一般情况分为二种:一是手工备份.二是自动备份.以下是二种方法的步骤: 一.手工备份 打开数据库,选择要备份数据库,右键选择[任务]->[备份],打开备份数据库页面,在[源]选择要备份的数据库和备份类型.在备份组件选择数据库.在[备份集]填写备份名称,说明和过期时间.这个可根据自已的需要去填写.在[目标]中选择磁盘或磁带.一般情况下都是备份到磁盘.所以不用理会.然后点右边添加按钮,选择文件保存的路径和文件名.最后点确定完成数据库存的备份. 二.自动备份1.启动Sql Ser

shell脚本—根据文件个数定时备份(转载)

#!/bin/bash ############################### #FileName:backupLogTimer.sh #Function:定时备份日志文件 #Version:0.1 #Authon:xueya #Date:2014.06.26 ############################### #获取当前路径 path=`pwd` echo "current1 path :${path}" #循环执行 while [[ 1 -eq 1 ]] do

Android 定位服务(转载)

今天因为工作需要,把以前编写的一个GPS测试程序拿出来重新修改了一下.这个程序说起来有些历史了,是我11年编写的,那时候学了Android开发没多久,算是一个实验性的作品.现在工作需要,重新拿出来修整.同时发现我对android的GPS服务了解并不深,所以今天特意阅读了有关GPS服务的一些资料,把相关知识点记录下来. 本人做了GPS相关的嵌入式软件已经几年了,所以说起要做个测试GPS定位模块的程序,第一反应就是串口读取GPS模块的数据,然后解析GPS的NMEA格式数据.NMEA是一种标准化数据格