最近用android写的一个项目,开发心得
从写android的hello world!到现在都半年多了,之前基本上都是零零碎碎的做一些小的案例,没有真正写一个全的应用。最近发现自己用手机传文件很不方便,于是就想自己动手开发一个android系统下无线文件传输应用(当然了应用商城上也有相关应用下载),全当练手,也算增加点项目经验吧。下面说说项目中的情况。
项目名称:匆匆传输
功能模块:
--欢迎界面Activity
----首次启动检测设备系统版本、SDCard、WIFI设备及蓝牙设备工作状态。
--主界面Activity
----文件管理Fragment
------文件列表、新建、复制、粘贴、删除、重命名、属性,共享(与PC电脑共享)。
----文件传输Fragment
-------通过WIFI,基于http(tcp/ip)协议,接收文件、传输文件。
----蓝牙通信Fragment
------通过蓝牙,接收文件、传输文件、发送文字消息。为保证数据正确,需自定义传输协议。
----应用设置Fragment
------用户自定义偏好设置,保存到共享首选项里。
--服务器Service
--客户端Service
--蓝牙通信Server
--Wifi网络发现广播WifiScanBroadcastReceiver
--Wifi状态改变广播WifiStateBroadcastReceiver
--Wifi热点状态改变广播WifiApStateBroadcastReceiver
--蓝牙状态改变广播BluetoothStateBroadcastReceiver
--自定义Application
--自定义UncaughtExceptionHandler,搜集未捕获异常。
--第三方类:NanoHttpServer.java,NanoHttpClient.java,HttpEngineLite.java,根据需求稍有改动。
1、首先Activiy开启和关闭需要用到动画,欢迎界面需要透明主题,因为只有首次才显示,以后都是直接跳转到主界面,如果不透明启动时会看到闪屏(白或黑背景)。因为需要按back键和启动也需要动画效果,所以要用到动画样式/主题,一开始把样式用在AndroidMainifast.xml文件的中好像不行,后来用在theme='...' />效果才好用。
2、主界面中有4个Fragment,因为有部分共同特征,为了方便所以写了一个BaseFragment继承于Fragment,一开始把各Fragment的init化放在onStart中,后来发现当按home键或新的Activity覆盖,后再恢复显示时,Fragment又重新init了,之前的画面状态没了,后来想到用onSaveInstanceState(存)、onResume(取)可是可以但处理的工作比较多。最后根据Activity及Fragment的生命周期,若把init化放在onActivityCreated或onCreateView就不会重新init了,因为Android框架中几乎所有UI控件都实现了onSaveInstanceState方法, 因此当Activity销毁和重建时, 这些UI控件会自动保存和恢复状态数据。关于Activity的onRestoreInstanceState是在activity被系统回收非人为,重启后会调用,而Fragment的onViewStateRestored,每次创建fragment实例都会调用。参照:http://www.cnblogs.com/hanyonglu/archive/2012/03/28/2420515.html 。
3、文件管理Fragment中有菜单,需setHasOptionsMenu(true); 需根据当前状态显示菜单项有所不同。文件共享时,需要bind启动服务器Service,需借助第三方类NanoHttpServer.java,才能实现跟电脑共享文件。基于TCP/IP协议的,传输文件稳定可靠。
4、文件传输Fragment中根据接收还是传送,分别bind客户端Service或服务器Service,需要借助第三方类:NanoHttpServer.java,NanoHttpClient.java,HttpEngineLite.java,得以实现传输。注册相应的广播接收器。不需要用时unbind服务及取消注册广播。
5、蓝牙通信Fragment,是纯socket通信,没有通用的蓝牙传输协议,若传输文件时,需自定义简单的传输协议,不然一般情况下就会丢失数据。若发送简单的消息无大碍。后来在网上发现,传输的文件发送给android手机的时候,某些文件不能够传输成功。原来Android只支持4中mimetype的接收,video/*,audio/*,image/*,text/plain,所以如果你要传输的文件不属于这四种mimetype,你在代码中还是要把它伪装一下,设置mimetype为其中之一。
6、这个类NanoHttpServer.java实现了简单的http服务器功能,能处理客户端请求并及时响应,处理http head头部参数,cookies信息,文件发送与接收。
更多相关文章
- 一款常用的 Squid 日志分析工具
- GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
- RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
- Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
- android studio启动一直卡在fetching Android(安卓)sdk compomen
- 样式表以及Color.xml文件『Android系列六』
- 导入开源库到基于Android(安卓)Studio构建的项目中
- Android添加全屏启动画面
- 一个Android应用的汉化的技术