第一步:创建 Android Studio 项目
第一步:创建 Android Studio 项目
Android Studio 有两种创建项目的方法。
第一种是在 Android Studio起始页选择“Start a new Android Studio Project”。
第二种是在 Android Studio 主页选择“File”–>“New Project…”
第二步:使用SuperMap iMobile for Android
1、解压SuperMap iMobile for Android 产品包。
2、根据功能的需要,从产品包中libs文件夹中选择需要的库文件拷贝到工程顶级路径下,本例以使用910版本为例(其他版本选用对应的库文件即可), 仅使用到二维功能,所以将产品包中libs文件夹中的核心模块库文件com.supermap.data_v910.jar、地图显示模块库文件com.supermap.mapping_v910.jar拷贝到 Module 的libs文件夹
3、然后在Module的build.gradle里加上jni的sourceSets配置:jniLibs.srcDirs = [‘libs’],完整代码请参见下面的代码段。
apply plugin: 'com.android.application'
android {
compileSdkVersion 26
defaultConfig {
applicationId "com.supermap.supermapimobiledemo3d"
minSdkVersion 15
targetSdkVersion 26
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:26.1.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.2'
}
第三步:添加SuperMap iMobile for Android 最低权限
1、在AndroidManifest.xml中添加
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
第四步:添加 Activity 配置
在“AndroidManifest.xml”中,承载 MapControl 的那个 Activity 项目中添加 Activity 配置,让地图界面在横竖屏切换时不再重复调用 onCreate。
具体配置如下:
在Activity 项目中添加如下配置
android:configChanges="keyboardHidden|orientation"
注意:当Android 版本在4.0以上时,配置configChanges要添加screenSize,具体配置如下:
android:configChanges="keyboardHidden|orientation|screenSize"
第五步:支持多格式屏幕配置
在 AndroidManifest.xml的manifest节点下添加以下配置:
<supports-screens
android:anyDensity="true"
android:largeScreens="true"
android:normalScreens="true"
android:smallScreens="true"
tools:ignore="ManifestOrder"/>
第六步:编写代码
在布局文件 activity_main.xml 中添加如下代码:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/main">
<RelativeLayout
android:gravity="left"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.supermap.mapping.MapView
android:id = "@+id/Map_view"
android:layout_width="match_parent"
android:layout_height = "match_parent">
</com.supermap.mapping.MapView>
<ZoomControls
android:id="@+id/zoomControls1"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_centerHorizontal="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true">
</ZoomControls>
</RelativeLayout>
</RelativeLayout>
在MainActivity中编写应用程序代码如下:
public class MainActivity extends Activity {
private MapControl m_mapcontrol = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String rootPath = android.os.Environment.getExternalStorageDirectory().getAbsolutePath();
//设置一些系统需要用到的路径
Environment.setLicensePath(rootPath + "/SuperMap/license/");
Environment.setTemporaryPath(rootPath + "/SuperMap/temp/");
Environment.setWebCacheDirectory(rootPath + "/SuperMap/WebCatch");
//组件功能必须在Environment初始化之后才能调用
Environment.initialization(this);
//如果机器中默认不包括需要显示的字体,可以把相关字体文件放在参数所代表的路径中。
//例如,如果需要显示阿拉伯文字(若机器中原先不包括相关字体文件),可以把需要的字体文件放在参数所代表的路径中。
Environment.setFontsPath(rootPath + "/SuperMap/fonts/");
setContentView(R.layout.activity_main);
//打开工作空间
Workspace m_workspace = new Workspace();
WorkspaceConnectionInfo info = new WorkspaceConnectionInfo();
info.setServer(rootPath + "/SampleData/GeometryInfo/World.smwu");
info.setType(WorkspaceType.SMWU);
m_workspace.open(info);
//将地图显示控件和工作空间关联
MapView m_mapView = findViewById(R.id.Map_view);
m_mapcontrol = m_mapView.getMapControl();
m_mapcontrol.getMap().setWorkspace(m_workspace);
//打开工作空间中的第二幅地图
String mapName = m_workspace.getMaps().get(1);
m_mapcontrol.getMap().open(mapName);
ZoomControls m_zoom = findViewById(R.id.zoomControls1);
m_zoom.setIsZoomInEnabled(true);
m_zoom.setIsZoomOutEnabled(true);
//放大按钮
m_zoom.setOnZoomInClickListener(new OnClickListener() {
public void onClick(View v) {
m_mapcontrol.getMap().zoom(2);
m_mapcontrol.getMap().refresh();
}
});
//缩小按钮
m_zoom.setOnZoomOutClickListener(new OnClickListener(){
public void onClick(View v) {
m_mapcontrol.getMap().zoom(0.5);
m_mapcontrol.getMap().refresh();
}
});
m_mapcontrol.getMap().refresh();
}
}