一种基于Android平台的远程监护报警系统的制作方法_2

文档序号:9728199阅读:来源:国知局
r、gson, jar、httpmime.jar添加至被监护、监护端工程lib目录下,实现对CloundBaaS中的方法进行调用,调用的方法包括:(1)使用CloudClient.1nit(context,appname,accesskey, secretkey)对CloundBaaS进行初始化操,context为appname为在新浪SAE平台创建应用时所填写的应用名称,accesskey、secretkey为创建后提供的AccessKey、SecretKey,调用后其生成一个httpclient对象,连接网络与服务器交换token信息;如未进行初始化,后续接口的调用将出现httpclient空指针异常导致应用崩溃,使用时请确保网络连接。
[0018](2)使用对象存储时,实例化一个User对象,对该User对设值User.set(newaddress( “test” , 9999))后使用CloudOb ject.save( 〃num_l〃,User)存储对象,其返回一个Boolean对象来表示存储操作是否完成;(3)数据库的使用主要用到两个接口,一个是〇1011(1013.911617(1113(^)对数据库进行查询的操作,返回结果为1^81:〈]\&1。〈31:1';[1^,31:1';[1^>>类型的的list列表,其中mSQL语句为要操作数据库的命令如:selectbindtel ,alarm lo cat 1n , rad iusfrommy_ch i ld_infowher ede vice id= ’123456’ ;〃;另一个是CloudDB.execute (mSQL),该语句对数据库进行 insert、update、delete操作,返回一个int类型的数值,表明数据库中受该语句影响的行数;(4)文件类型的存储的接口有:上传CloudFile.upload(urll)、下载CloudFile.fetch(url2)、删除CloudFile.delete(url2),url 1为本地待上传文件的位置,url2位服务器端文件位置;步骤S4:在数据库中将被监护端上传的数据写入db_child_info数据表,将监护端上传的数据库写入db_myuser中;被监护iMdb_child_infofj(i§^:/Sl^'deviceidNuploadtimeNlocat1nN locat 1n_path、&1&1'111100&1:;[011、作(1;[118、13;[11(^61字段,其中(16¥;^61(1为被监护的手机的设备号码,每个手机独有,该字段不可为空,uploadtime为上传时间,locat1n为被监护端手机当前位置,locat 1n_path为被监护端历史轨迹文件locat1n.txt存储的路径,三者为service上传位置信息时上传的数据。alarmlocat1n为监护端设定的预警中心位置坐标,radius为预警半径,bindtel为监护端绑定被监护端时提供的预警短信接收号码;
监护端 db_myuser 数据表中包含 account、passcode、bindname、tel、binddevice 字段,其中account、passcode为监护者的账号密码,tel为监护者手机号码供接收预警短信使用,此三个数据不可为空,在注册时提交,bindname、binddevice为绑定时上传的绑定备注和绑定的被监护对象的设备号。
[0019]总的来说,监护端通过被监护端独有的设备号对被监护端进行绑定,而后获得查看被监护端数据库中位置等信息的权限。至此,远程监护报警系统的外网服务器已完成搭建。
[0020]所述被监护端的功能实现包括以下步骤:征求用户同意后,直接获取被监护端的设备号,更新到被监护端的数据库中,同时开启Service服务,与后台服务器交换数据信息;Service服务每5秒向服务器数据库发送本机位置信息,发送的位置信息包含位置更新时间Uloadtime及位置的经玮度坐标locat1n,每五分钟向服务器数据库发送包含历史位置信息的locat1n.db文档,内嵌的位置信息格式与发送至数据库的信息格式一致;在发送位置信息的同时,判断该被监护端的所对应设备id在db_child_info中alarmlocat和radius的值是否为空,不为空则获取数据存入应用全局变量中,再使用
Floatdistance=AMapUtils.calculateLineDistance(startLatlng,endLatLng),计算出当前位置作标和设置的预警中心坐标的距离,其方法返回的数值单位为m,直接同设置的预警半径radius进行大小的判断,在对比前,应用设置了标志位,通过标志位判断是否发送短信,设定发送短信的条件为被监护对象进行跨界动作时便向监护端发送。
[0021]由于开发过程中各个Activity进行的功能不同,有的Activity修改了一些如绑定状态、网络监听状态等参数,这就需要进行Activity间的通信,由于Activity众多,所以通信起来十分的麻烦,为了解决这个问题,在本应用中应用了全局变量AppData类,它的生命周期和整个应用一致,并不会像普通的数据类那样一旦哪个Activity销毁后便随着Activity的销毁而消失。因此使用AppData类保存一些状态变量如是否从服务器上读取绑定信息完成绑定信息的初始化操作的、及全局数据账号、密码等。
i0022] AppData的实现:要实现AppData首先应写一个数据类,里面写各种需要用到的数据类型,然后对这些数据类型封装getter和setter,再将这个数据类继承Applicat1n 类,继承之后,打开配置文件 AndroidManifest.xml ,? applicat1n 属性中追加:
android:name=“com.lxylbs.data.AppData”
其中com.lxylbs.data.AppData为刚才所写的数据类的位置,完成了全局变量类的编写,接下来就是使用了,使用时实例化一个AppData对象,如Appdata mAppData,再对该对象初始化,mAppData=( Appdata) con text.getAppl i cat 1nCon text (),接着调用mAppData的getter和setter进行对数据的操作。应用中很多地方都会用到网络去访问远程的数据,由于网络的不确定性,一些数据到达的时间是不可预测的,所以远程数据的获取与数据的使用不能同步,必须用异步线程去访问。现有技术中常用Handle机制去处理这些事件,但是Handle的使用必须传入一个Handle对象,使用起来并不是太方便,于是本发明使用广播机制解决这个问题。对远程操作数据库的结果以广播形式发出,哪个Activity需要接受这个广播,只需在Activity中添加广播过滤器,注册这个广播即可,但是哪个Activity用哪个Activyty注册的情况下,每一次用都必须实例化一个BroadcastReceiver对象,并对它的接收做接收方法处理,代码维护起来又十分地不方便。因此,本发明中写了一个BaseActivity基类。
[0023]因此所述监护端的功能实现包括以下步骤:步骤一:写一个数据类,该数据类包括需要用到的数据类型,然后对这些数据类型封装getter和setter,再将该数据类继承八卩卩1;[031:;[011类,继承之后,打开配置文件411(11'0丨(1]\&111丨1^81:.11111,在3卩卩1;[031:;[011属性中追加:android:name= “com.lxylbs.data.AppData” ;其中com.lxylbs.data.AppData为所述数据类的位置;使用时实例化一个AppData对象,AppdatamAppData,再对该对象初始化,mAppData=(Appdata)context.getApplicat1nContext(),接着调用mAppData的getter和setter进行对数据的操作;步骤二:写一个BaseActivity基类,该基类声明为抽象的基类,基类里注册了整个应用会使用到的广播,类中只写了一个onReceive方法对接收到的广播的Act 1n、stringExtra进行判断,并结合上述的全局变量类对数据进行存储操作,哪个Activity使用广播只需继承这个基类;该基类中包括一抽象方法为sendMsg(Stringmsg),改方法实现对其他activity的UI进行操作处理,msg参数为处理数据后的结果,在sendMsg中对UI进行操作,对全局变量类AppData进行数据的读写实现对Activity的调用的;步骤三:开启WelcomeAcivity,其进行数据库的初始化操作,用BaseActivity中的Connect1nChangeReceiver广播监听网络变化,无网络时不对数据库进行操作并弹出Toast消息通知用户,网络不可用,WelcomeActivity使用Handle机制延时五秒后自动跳转至LoginActivity进行用户登陆;步骤四:登陆成功后进入HomeActivity,HomeActivity为被监护对象定位、预
当前第2页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1