Code

2011年5月14日星期六

iCreate: Progress 2

原来平时所说的手机上GPS定位是一种误导。
手机上的定位除了GPS还可以用wifi热点和信号塔来定位。一般在室内的时候GPS很难接收到卫星信号,所以必须通过wifi热点,或者信号塔来定位来判断地点。GPS虽然比较精确(可以在20米以内)但它耗电大,定位慢。用wifi热点定位就需要周围有热点,这些热点的位置信息有的被记录在apple 或者google的server上(最近有关apple秘密发送用户存储在自己iphone里的地理信息就是这个目的)。如果有开3G,不需要连接到wifi,只需要打开wifi就可以定位。但如果没有3G就必须连wifi上网了。当然开了wifi和3G也是相当耗电的。如果在公路上面开车,就没有wifi热点,就只能用信号塔来定位了。信号塔的精确度很低,一般在几公里内,但是对于手机来说,只要在服务区内,就会有信号。
Android可以根据不同的标准如速度,精确度,流量,方向数据等自动选择不同的信号源。所以,在手机上定位还是一件比较复杂的事情。
另外,这两天把drag map的功能移植到了我们的NUS Path Finder。那个功能是索爱开发网站上找到的,有一连四个tutorial。不过现在他们好像把那个tutorial封了,估计是不想让别人抄他们的技术。幸好我下手早。然后,现在在实现一个overlay的功能,到时候我们需要把路线在地图上显示出来,所以这个功能很重要。
现在的想法就是在显示map view上面直接画drawables,不过问题是drawables的位置很难定。特别是drag地图还有dynamic效果。
今天晚上弄了一下,用了个很简单的办法。创建一个跟map一样大小的bitmap,先把map画上去,然后再画overlay的东西。最后把这个bitmap画出来就行了。在画overlay之前可以做一些transformation。严格来讲这并不算是overlay, 只是把好几个东西一层一层的话在一张图上,虽然很方便,但不够flexible,不能很好的控制多个overlay。
我觉得overlay在google map里的复杂的实现方法是因为google map很complex,需要经常性的更换图层,而且map并不只有一个tile,很多tile要dynamically load,用我这种方法很不方便。

2011年5月7日星期六

iCreate: Progress 1

经过与小猫的讨论,我们最后决定做一个NUS Pathfinder。 顾名思义,也就是给它起始地点,目的地,会得到一条最近路线。这个相当于一个小的map engine了,因为它可以在很多地方用。比如说我们想到过的,可以plugin到课程表里,从课程表里拿到目的地,从GPS拿到起始地,这样学生就可以很方便的找到上课的地方。不过我们要先做这个map engine,然后再考虑其他的东西。

我有个大概的思路。我们的地图只是包涵NUS内部的地点,所以它的大小是一定的。我准备拿NUS网站上的地图,它很详尽,精确到了教室级别的,基本上我们每天可能会要去的地方上面都可以找到。最重要的是它是长方形的,这意味着,如果我知道四个角的坐标,我就能够知道里面任何一个建筑的坐标。这可以省去很多麻烦。

地图上每个潜在的目的地,如教室,讲堂,实验室,车站等等都会分配它一个节点。每个节点会记录坐标,楼层数,是不是汽车站,相邻的节点等。相邻的节点必须可以直接走通的,不需要经过其他的节点,这个是需要我实地测量的,这个也是最耗时的。一个节点网络会被组建起来。通过这个网络我们可以用寻路算法如Dijkstra 或者 A*。我比较看好A*,因为我们有特别的节点如车站,在距离很远的情况下,我们更应该选择车站。最后我们就给出一个路线,可以是在地图上标记出来的,也可以是一个list。

小猫准备写一下Spec和Design,不过要等到下个拜一。这两天我就研究了一下我们可能会遇到的问题,比如说地图在哪里可以找到,要有多少个level of detail,怎样pan和zoom地图。今天我准备看看怎样实现GPS。貌似除了GPS,我们还可以用Gyrometer来确定方向,这个可以作为enhancement。

2011年5月4日星期三

iCreate NUS mobile challenge

前几天一直在做我的super timer。经过摸索,大致完成了下面几个步骤:
1. setup sqlite3 database
2. create new profile using menu item and use listview to render
3. select a profile and send intent to a new activity to display
4. the profile display retrieve data from database according to id sent
5. use handler and runnable to create countdown timer
6. use relative layout to play buttons at bottom

如果继续做下去应该不需要多少天就可以完成。另外,我发现其实Android mart里已经有了一个这样的app叫做timer4me,它的界面很精美,可以看出developer用了很多心思。不过,还是有一些不足,比如说在run一个timer的时候,那个timer显示的太小了,不是很明显。setup 时间的时候只能用date picker不能set任意时间。当然这些需要的只是extra effort,也许developer 觉得根本就没有必要。不过我觉得这些可以算作是enhancement了。我的super timer就告一段落了,做这个本来就是为了熟悉一下android开发,而这个目的完全达到了。其实更重要的是我register了一个NUS的mobile app challenge, iCreate。

这个challenge是要develop android application for nus students。奖品很丰厚,第一名有一个tablet phone+S$2000。我跟小猫一起报名了。对于这个比赛,小猫和我都是信心满满。小猫是软件开发之后,呵呵,我又有android和web开发经验。相信我们的组合一定可以拿个好成绩。

比赛的submission deadline是7月17号,所以我们有差不多两个月的时间。我很想有一个很成功的软件开发的经验,所以我极度的想做好这个app,希望小猫能跟我一起加油。