前面完整的Android引路蜂地图应用源码下载 提供了源码下载,这里对这个项目做个简单的说明以方便阅读。
整个应用代码量在4000行左右,不算很大,下面是对代码中主要Package的说明:
文件名 |
空行 |
注释 |
代码行 |
说明 |
AboutActivity.java |
13 |
4 |
47 |
关于软件说明 |
app\GNavigatorApplication.java |
27 |
23 |
93 |
主应用类 |
app\SessionInfo.java |
9 |
3 |
11 |
保持一些全局变量 |
app\SharedMapInstance.java |
13 |
38 |
18 |
保存RasterMap类实例 |
app\SharedSearchResults.java |
12 |
0 |
22 |
保存查询结果 |
database\DatabaseAssistant.java |
42 |
63 |
122 |
用于数据库访问,用来管理设备,这部分可以不看 |
database\DBAdapter.java |
27 |
126 |
77 |
database\DBMapper.java |
4 |
38 |
7 |
database\DeviceDBMapper.java |
20 |
86 |
130 |
database\DeviceLocationHistoryDBMapper.java |
19 |
56 |
60 |
database\PersistentFacade.java |
28 |
168 |
67 |
dataobject\Device.java |
14 |
0 |
15 |
设备定义,设备命令,这部分可以不看 |
dataobject\DeviceCommand.java |
7 |
0 |
17 |
dataobject\DeviceLocationHistory.java |
5 |
0 |
7 |
device\AddDeviceActivity.java |
14 |
1 |
70 |
软件可以用来跟踪其他设备或者报告设备当前位置,这部分可以不看 |
device\DeviceCommandListActivity.java |
39 |
4 |
202 |
device\DeviceControlTabActivity.java |
16 |
1 |
80 |
device\DeviceInfoActivity.java |
8 |
1 |
49 |
device\DeviceLocationHistoryListActivity.java |
19 |
1 |
81 |
device\ManageDeviceListActivity.java |
44 |
4 |
208 |
drawing\AndroidFont.java |
9 |
27 |
17 |
和Android平台相关的引路蜂图形接口实现 |
drawing\AndroidGraphics.java |
20 |
150 |
57 |
drawing\AndroidGraphicsFactory.java |
10 |
83 |
23 |
drawing\AndroidImage.java |
20 |
114 |
65 |
gis\FileMapTiledZone.java |
17 |
23 |
43 |
用来访问离线地图文件 |
GNavigatorActivity.java |
82 |
31 |
516 |
主Activity |
GuidebeeMapView.java |
52 |
25 |
301 |
地图View,可以自定义并扩展,支持Gesture缩放等 |
location\LocationService.java |
54 |
55 |
90 |
GPS服务 |
mapmode\MapModeListActivity.java |
16 |
11 |
50 |
选项地图模式界面 |
routing\RouteDetailActivity.java |
52 |
34 |
274 |
显示详细路径 |
routing\RoutingActivity.java |
26 |
1 |
159 |
路径查询界面 |
search\SearchResultListActivity.java |
41 |
25 |
246 |
查询结果 |
search\SearchSuggestionProvider.java |
2 |
0 |
9 |
查询提示 |
settings\SettingsActivity.java |
19 |
26 |
86 |
软件设置界面 |
sms\DeviceMessage.java |
4 |
0 |
5 |
控制设备的短消息处理,这部分可以不看 |
sms\DeviceMessageCenter.java |
7 |
0 |
18 |
sms\DeviceMessageProcessor.java |
45 |
1 |
209 |
sms\SmsMessageReceiver.java |
13 |
15 |
28 |
ToolbarButton.java |
36 |
1 |
259 |
工具条自定义View |
其中和Device相关的部分,包database, dataobject, device, sms 部分可以跳过不需要看,这部分和地图API使用关系不大,主要用来监视GPS设备或其它手机的位置。
drawing 包实现了地图API中和图形系统相关接口的Android平台上实现 ,引路蜂地图开发包中Gis.Drawing 类定义了几个抽象类或接口,对不同平台的图形系统进行了抽象。这些绘图的接口不同,如果在引路蜂地图开发包直接引用这些类方法,这样不同平台就会需要编译不同的开发包。通过抽象处理,引路蜂地图开发包并直接调用平台相关的图形类方法。而是通过 开发包 + 平台相关图形系统实现的方法,就可以实现跨平台.具体可以参见图形子系统。
GuidebeeMapView 主要用来显示地图,这个给出的是一个参考实现,支持触摸屏平移,事件你可以把地图放在任何可以显示Image对象的控件上,添加你自己的Logo,支持MultiTouch 缩放等,本身是个自定义View (为View的子类),你可以自由扩展其功能。
FileMapTiledZone 用来支持从文件读取离线地图,这部分代码可以不需修改应用到你自己编写的引路蜂地图应用中。
应用程序框架基于RoboGuice 以简化代码,关于RoboGuice的使用可以参见本博客 的Android RoboGuice 使用指南。
搜索使用Android平台的Search Framework。可以参见
再看一下项目的AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.pstreets.navigator"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="4" />
<application
android:name=".app.GNavigatorApplication"
android:icon="@drawable/navigator"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Black.NoTitleBar" >
<activity android:name=".GNavigatorActivity" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data
android:name="android.app.default_searchable"
android:value=".search.SearchResultListActivity" />
</activity>
<activity
android:name=".search.SearchResultListActivity"
android:launchMode="singleTop" >
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable" />
</activity>
<activity
android:name=".AboutActivity"
android:launchMode="singleTop" >
</activity>
<activity
android:name=".mapmode.MapModeListActivity"
android:launchMode="singleTop" >
</activity>
<activity
android:name=".routing.RoutingActivity"
android:launchMode="singleTop" >
</activity>
<activity
android:name=".routing.RouteDetailActivity"
android:launchMode="singleTop" >
</activity>
<activity
android:name=".device.ManageDeviceListActivity"
android:launchMode="singleTop" >
</activity>
<activity
android:name=".device.AddDeviceActivity"
android:launchMode="singleTop" >
</activity>
<activity
android:name=".device.DeviceControlTabActivity"
android:launchMode="singleTop" >
</activity>
<activity
android:name=".device.DeviceCommandListActivity"
android:launchMode="singleTop" >
</activity>
<activity
android:name=".device.DeviceInfoActivity"
android:launchMode="singleTop" >
</activity>
<activity
android:name=".device.DeviceLocationHistoryListActivity"
android:launchMode="singleTop" >
</activity>
<activity
android:name=".settings.SettingsActivity"
android:launchMode="singleTop" >
</activity>
<receiver
android:name=".sms.SmsMessageReceiver"
android:enabled="true" >
<intent-filter android:priority="1000" >
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
<provider
android:name=".search.SearchSuggestionProvider"
android:authorities="com.pstreets.navigator.search.SearchSuggestionProvider" />
</application>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_OWNER_DATA" />
<uses-permission android:name="android.permission.WRITE_OWNER_DATA" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
</manifest>
使用的permission 需要有INTERNET(地图API需要访问网络) ,WRITE_EXTERNAL_STORAGE (离线地图需要访问SD卡)其它权限可以根据需要添加。
最后看一下软件的项目目录结构:

项目引用三个库,其中libgisengine.jar 为引路蜂地图API,其它两个为roboguice 库。 支持中英文两种资源 values-zh-rCN 为中文string 资源。