要达到上述的效果,就需要使用Socket通讯,原理很简单,相当于集成了一个微型的IM,每个移动的客户端联网的时候注册到控制中心,在控制中心就可以随时面向某个移动终端发送指令。
移动端连接到控制中心:

控制中心随时对移动端发送指令:

移动端收到指令(后续可以跟进其它操作):
猴子都能写代码,这个年代还有什么不可能?










在这段代码里出现了一些新东西。首先是Intent,它是Android一个很重要的类.Intent直译是“意图”,什么是意图呢?比如你想从这个Activity跳转到另外一个Activity,这就是一个意图。它不但可以连接多个Activity,还可以在它们之间传递数据。在这里,我们就是用Intent从MyApp对象跳转到了Input对象。





让我们首先从MyApp的目录结构入手。可以看到,在根目录下有一个“AndroidManifest.xml”文件,这是Android程序的清单文件,任何项目的组成模块都需要在这个xml文件中首先进行声明。“src”目录包含了项目的Java源代码。“res”目录包含了项目的资源。资源包括drawable(图片)、layout(布局)、values(值),所有这些资源都有一个ID,它们都由“src”目录下的“R.java”自动维护,通常你不需要去手动修改“R.java”这个文件,在项目中,通过R这个类就可以获得对应资源的ID,从而访问所有这些资源。
MyApp类继承自Activity,Activity是Android应用程序的重要组成部分之一,它通常表现为一个屏幕,可以显示用户界面,并响应事件,简单来说你可以把它理解成桌面程序的一个窗体。一个应用可以有多个窗体,在多个窗体间可以跳转,从这点来说Activity的功能类似。当然,这是一种粗糙的类似,在后面我们慢慢发现Activity的一些其它特点。

让我们回到setContentView(R.layout.main)方法,这个方法原型是setContectView(int resourceID),我们通过R.layout.main可以得到main.xml这个布局文件的资源ID,因此,这个方法就设置了MyApp这个Activity的View,并且在屏幕上显示了出来。

这个Button我给它一个id来标识叫buttonHit,这是通过Button的id属性定义的:android:id="@+id/buttonHit"。这个id同样可以在通过R这个类来引用(在这之前需要先编译main.xml这个文件),下面我们马上就要使用这个id,因为我们想给这个Button添加一个事件响应。
调试一下:
在下一小节中,让我们看一下一个Android应用中的多个Activity之间的跳转和传值。
tools/的路径添加到环境变量的PATH。







当使用 ArcGIS Mobile 9.3 SDK 开发的程序向 ArcSDE for PostgreSQL 提交本地新建或更改的Feature时,目标服务会崩溃并报“gsrvr.exe error”错误。开发人员已证实这是一个bug,将在SP1中被修复。
以前没有注意到这个问题,今天换了一个模拟器调试原先的程序,抛出“Missing ArcGIS registry key”错误。
这与ArcGIS Mobile的开发环境配置不人性化有关。我们知道ArcEngine开发桌面程序需要目标机器安装Runtime,但是开发机器的环境已经包含了 Runtime。ArcGIS Mobile与此类似,部署的时候需要在目标设备上安装ArcGIS Mobile Runtime,但是开发调试时并不会自动部署,因此需要你首先手动安装。
安装包是“%ARCGIS_HOME%\DotNet\WindowsCE\Install\AGMRuntime.CAB”,对于定制的WinCE平台,可能需要安装AGMRTWinCE.CAB
【环境】Windows XP SP3,ArcGIS Server 9.3,Visual Studio 2008,Windows Mobile 6 Professional SDK
我们已经知道,ArcGIS Mobile支持离线和在线两种应用。我们可以选择让ArcGIS Mobile应用在首次请求的时候保存地图缓存,也可以在此之前(部署应用之前),预先生成缓存,跟应用一起发布。是不是有点像原来的单机设备应用?
好,让我们把ArcCatalog打开,启动ArcToolbox工具箱:
在工具箱中,找到“Mobile Tools”。ArcToolbox专门为Mobile应用提供了两个工具。其中“Generate Mobile Service Cache”就是用以生成Mobile地图服务的缓存。
点 击确认,经过处理,在指定目录生成了缓存。我们可以比较一下,这些缓存和在移动设备上通过MobileService对象生成的缓存是一样的。换句话说, 在部署的时候将这些缓存部署到缓存目录以后,MobileService可以直接打开它,无需与服务器进行任何交互。
这 是Mobile的特殊数据,目的在于通过对地图数据进行高度压缩,使之在移动设备上的性能更加优化。Basemap与我们前面使用的Mobile地图服务 数据不同,Basemap是不提供用户进行操作的,它将在程序运行时首先被渲染,其他所有的Mobile地图都将在它之上绘制——简单地说,它应该被称为 底图。
创建Mobile Basemap很简单,我们从ArcToolbox中点击“Create Mobile Basemap”,根据提示操作即可。一个mxd文档对应一个navmap文件,每个图层也都有相应的对应文件。
在ArcGIS Mobile中,有个专门的命名空间“ESRI.ArcGIS.Mobile.SdcData”,这个命名空间包括了所有对Basemap进行操作的类。事实上,Mobile Basemap对应的数据叫做SDC base map data。
Basemap的使用非常简单:
| try |
看一下效果。我们把整个北京地图生成了Basemap预先部署到移动设备上,而仅仅将建筑物图层发布成地图服务,如图,Basemap自动衬在底部,想一下,对于某些应用,你会不会有一种把所有不经常变化的内容全部生成Basemap的冲动?
哦,还需要说明一下,Basemap和其他Mobile 地图服务的空间参考需要是一致的。
说是移动桌面程序,跟不移动的桌面程序有区别么?所以,这一部分需要说的内容实在太少了,在移动设备上开发调试都可以过来了,桌面程序还有困难么?
当然,还是有一点点小地方需要注意。比如新建工程,一定不要采用默认设置.Net Framework为3.5版本。
以下是Develop Help中提到的一些常见问题:
1. ArcGIS 9.3的Mobile SDK是否使用ArcGIS 9.2发布的Mobile Service?
很遗憾,不能……
2. 我能用Visual Studio 2003开发ArcGIS Mobile应用吗?
不能,ArcGIS 9.3 Mobile SDK需要.Net Compact Framework 2.0支持。
3. 我生成了Mobile应用,但是为什么我看不到地图?
出现这个问题,如果你使用了地图缓存,检查你的缓存路径是否正确。如果是从服务器获取数据,那么检查你的Mobile 地图服务是否正常工作。同时,确认你的Map控件的Datasource属性中的MobileService对象设置正确。
4. 为什么ArcGIS Mobile toolbox没被添加到Visual Studio 2008工程中来?
ArcGIS 9.3 Mobile SDK不能和.Net (Compact) Framework 3.5兼容,这是Visual Studio 2008的默认设置,注意在新建工程的时候选择正确的.Net Framework。
5. 如何获得开发ArcGIS Mobile应用的最新信息?
http://edn.esri.com/index.cfm?fa=mobile.gateway
【结 语】好了,到这里,ArcGIS Mobile SDK 9.3的整体内容已经基本介绍完成。ArcGIS Mobile作为ArcGIS Server的一部分发布,其与ArcGIS Server也的确是紧密相连。当然,事实上在某些条件下,ArcGIS Mobile还是可以脱离ArcGIS Server跑起来的。希望本文能给你开发移动GIS应用带来一点帮助!