最近用android写的一个项目,开发心得

来源:互联网 发布:mac粉底液色号分类 编辑:程序博客网 时间:2024/05/21 22:44

从写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文件的<application theme='...' />中好像不行,后来用在<Activity 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信息,文件发送与接收。






0 0
原创粉丝点击