从写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信息,文件发送与接收。






更多相关文章

  1. 一款常用的 Squid 日志分析工具
  2. GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
  3. RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
  4. Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
  5. android studio启动一直卡在fetching Android(安卓)sdk compomen
  6. 样式表以及Color.xml文件『Android系列六』
  7. 导入开源库到基于Android(安卓)Studio构建的项目中
  8. Android添加全屏启动画面
  9. 一个Android应用的汉化的技术

随机推荐

  1. android线程调度工具类SchedulerUtils
  2. Andriod(3)——Understanding Android(安
  3. Android实现系统重新启动
  4. Android常用的技术点
  5. Android中设置TextView的颜色setTextColo
  6. Android自动横屏注意事项
  7. Android开发平台部署
  8. Android:用定时器刷 timer 新界面
  9. Android为多媒体文件生成缩略图
  10. android环境部署(1.1)