collect info for sdn
- 1.service以及service与activity通信
- 2.通过okhttp上传数据
- 3.FTP下载
- 4.wifi管理
在activity中启动并绑定service,注意service仍然属于activity的主线程,不能直接在service中执行耗时操作,必须在service中新建线程来执行耗时操作(FTP、okhttp、wifi等)。 一般操作顺序:启动服务、绑定服务 -> 解绑服务、停止服务。
- 1、在MyService中新建一个Binder类,继承自android.os.Binder。并在该类中实现一些方法。
- 2、在MyService中重写的onBind方法中,new一个Binder类实例,并返回。即将该实例返回给activity中的onServiceConnected方法的参数。
- 3、在服务绑定成功时,将执行onServiceConnected方法。该方法传入的iBinder访问到的是MyService中onBind()的返回值。故可以在activity中通过该方法得到MyService中的Binder。
- 4、activity中直接调用Binder的方法,将参数传入Binder的方法中即可。在activity中调binder.getService().setCallback(new MyService.Callback()用Binder的方法,等用于在Service中调用Binder的方法。
- 5、Binder方法:传入的参数来自activity的调用,方法内部将参数赋值给MyService的成员,即实现将activity中的值传递到MyService中。
原理:通过监听实现,将MyService中动态变化的值返回给activity。通过Binder将MyService.this传入activity中,以便在activity中实现MyService中定义的回调接口。
- 1、在MyService中定义一个Callback接口,并在里面定义onDataChange(String data)函数。
- 2、在MyService的线程中执行callback.onDataChange(myData),即将MyService的数据myData传入,调用监听函数。
- 3、在MyService的Binder类中实现getService()方法,该方法返回MyService.this。
- 4、在activity的onServiceConnected方法中,得到MyService.this并实现Callback接口,即binder.getService().setCallback(new MyService.Callback(),重写onDataChange(String data)方法,此方法的data参数即为MyService传递过来的。
- 5、在activity重写的onDataChange方法中得到MyService的数据,并通过Handler更新UI。
- 直接使用okHttpUtiles上传数据。参见详情
- 因为要定时发送,故采用定时任务new Timer().schedule(task, 1000, 1000)。1s后启动任务,每隔1s执行一次task(上传)。
- 使用org.apache.commons.net.ftp.FTP下载
- 注意:android 6.0 需要在代码中动态申请存储权限
- 使用wifilibrary。 参见详情
- BaseWiFiManager为管理wifi的基础类,其中定义了关于wifi的基本操作的函数。例如打开、关闭、连接、获取当前连接wifi等功能函数。
- WiFiManager继承BaseWiFiManager。并注册了系统关于wifi的广播,接受系统的wifi广播,并在对应的广播下面调用监听器。
- 在MainActivity中实现相关的监听器,就可以在wifi情况发生改变的条件下做出相应的动作。
- 注意: 为保证wifi一直连接指定wifi,在MyService中新建线程,每隔一定时间就去判断当前是否连接指定wifi,否则就连接指定wifi。(保证措施)