背景:这里运行的是“产品入门”的“基于Android studio开发移动GIS程序”的“开发三维移动GIS程序”,本篇对超图帮助文档进行了完善,对于部分用户的闪退问题做出了解决,可以对照超图文档一起学习。

(一)创建工程

(1)在 Android Studio 起始页选择【Create new Project】。

(2)选择项目模板 根据项目实际情况选择对应的模板,点击【Next】。本向导中选择【Phone and Tablet】选项卡中的【Empty Activity】。

(3)配置项目:依次填写项目属性,其中Language 选择【Java】。填写完成后,点击【Finish】。

(二)使用 SuperMap iMobile

(1)添加库文件

库文件在产品包 libs 文件夹下,根据功能需要,从 libs 文件夹中选择需要的库文件拷贝到工程的 libs 文件夹下。这里用到“核心模块库文件 com.supermap.data_v1100.jar”和“三维显示模块库文件 com.supermaprealspace_v1100.jar”。

选中上步中添加的 jar 文件,右键-> add as library,如下图所示

(2)添加 so 依赖

将三维示例要用的的 libimb_v1100.so 文件放入工程的"libs\armeabi-v7a"文件夹中。

这里要注意的一个问题是导入so依赖包的时候,要带着文件夹“armeabi-v7a”一起导入,并且文件夹名称最好是不要改动,后面需要用到。

(这两步中为了省事我把整个libs文件夹替换了)

在 Module 的 build.gradle 添加 jni 的 sourceSets 配置:jniLibs.srcDirs = ['libs'],在 defaultConfig 下 添加 ndk 设置:abiFilters 'armeabi-v7a'。参考代码如下:

android {
compileSdkVersion 28
buildToolsVersion "29.0.3" defaultConfig {
applicationId "com.example.supermapimobile2d" minSdkVersion 23
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
//手动添加
ndk {
abiFilters 'armeabi-v7a' }
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'),
'proguard-rules.pro'
}
}
//手动添加
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}

这里我把文档里面的sdk29改成了28,后面帖子会说明原因。

(3)添加最低权限

双击“AndroidManifest.xml”,打开工程配置文件,在里面添加必备权限:

<uses-permission android:name="android.permission.INTERNET" />
<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" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

Android 6.0 系统在原有 AndroidManifest.xml 声明权限的基础上新增运行时权限动态检测,定位等权限 也包含在其中。

Android 6.0 系统默认为 targetSdkVersion 小于 23 的应用授予申请的所有权限,所以 App 设置的 targetSdkVersion 低于 23,运行时不会崩溃。

(4)添加activity配置

在“AndroidManifest.xml”中,承载 MapControl 的 Activity 项目中添加 Activity 配置,让地图界面 在横竖屏切换时不再重复调用 onCreate。代码如下:

android:configChanges="keyboardHidden|orientation|screenSize"

(5)支持多格式屏幕配置

在 AndroidManifest.xml 的 manifest 节点下添加以下配置:

<supports-screens
android:largeScreens="true"
android:resizeable="true"
android:normalScreens="true"
android:anyDensity="true"/>

(6)编写代码

在布局文件 activity_main.xml 中添加场景控件,代码如下:

<com.supermap.realspace.SceneControl
android:id="@+id/SceneControl"
android:layout_width="match_parent"
android:layout_height="match_parent"/>

并添加button按钮如下:

   <Buttonandroid:id="@+id/btn_open"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentBottom="true"android:layout_alignParentEnd="true"android:layout_marginBottom="22dp"android:layout_marginEnd="28dp"android:text="@string/打开离线场景"/>

在 MainActivity 中编写应用程序代码如下:

package com.example.supermapimobile3d;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Button;
import android.view.View.OnClickListener;
import android.view.View;
import com.supermap.data.Environment;
import com.supermap.data.Workspace;
import com.supermap.data.WorkspaceConnectionInfo;
import com.supermap.data.WorkspaceType;
import com.supermap.realspace.Scene;
import com.supermap.realspace.SceneControl;
public class MainActivity extends AppCompatActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String sdcard =
android.os.Environment.getExternalStorageDirectory().getAbsolutePath().toString();
Environment.setLicensePath(sdcard + "/SuperMap/license/");
Environment.initialization(this);
setContentView(R.layout.activity_main);
Button btnOpen = (Button)findViewById(R.id.btn_open);
btnOpen.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//打开工作空间
Workspace workspace = new Workspace();
WorkspaceConnectionInfo info = new WorkspaceConnectionInfo();
info.setServer(sdcard+"/SampleData/CBD_android/CBD_android.sxwu");
info.setType(WorkspaceType.SXWU);
workspace.open(info);
//场景显示控件与工作空间相关联
SceneControl sceneControl = (SceneControl)findViewById(R.id.SceneControl);
Scene scene = sceneControl.getScene();
scene.setWorkspace(workspace);
//打开场景
String sceneName = workspace.getScenes().get(0);
scene.open(sceneName);
}
});
}
}

ps:这里要注意两个点,在文档里没有特别说明,不过一般大家也都能够看的出来。

(使用真机模拟:手机用数据线连接电脑,调成“文件传输模式”,打开手机“开发者模式”,不同手机打开方法不同,可以自行百度打开。最后在开发者模式里面,打开usb调试。)

第一,许可位置。在手机根目录也就是内部存储下面新建文件夹SuperMap,在里面新建文件夹license,将申请的试用许可放在这里。(许可申请可以查看官方文档,很简单。)

第二,地图数据位置。可以看到代码里用的是(sdcard+"/SampleData/CBD_android/CBD_android.sxwu"),可以到超图给的示例数据与示例代码中找到这个地图数据(下载软件的时候会带的),我的在这个位置。把这个文件夹放到手机根目录的SampleData文件夹下面的CBD_android文件夹里面。(没有就新建,不然改路径名称也行,对应好就可以)。

(7)运行程序

这个时候就可以运行了,但是一般来说是会闪退的。超图的文档就给到这里,很不友好。原因是没有授予app访问手机文件的权限,自然也就获取不了工程许可以及地图数据。

解决办法1:

手动给app访问所有文件的权限。

解决办法2:

编写代码实现app运行弹窗选择权限。

代码如下:

   private void requestPermissions() { //Android6.0以上设备设置动态权限if (Build.VERSION.SDK_INT >= 23) {// 检查是否拥有权限String[] permissions = {Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.READ_PHONE_STATE,Manifest.permission.ACCESS_WIFI_STATE,Manifest.permission.ACCESS_NETWORK_STATE,Manifest.permission.CHANGE_WIFI_STATE,};String permission = null;int id = 0;boolean isBreak = false;int checkCallPhonePermission = 0;for (int i = 0; i < permissions.length; i++) {permission = permissions[i];checkCallPhonePermission = checkSelfPermission(permission);if (checkCallPhonePermission != PackageManager.PERMISSION_GRANTED) {requestPermissions(permissions, id);isBreak = true;break;}}}}

在oncreate里面调用一下requestPermissions();即可。

----------------------------------到这里应该就可以成功运行啦------------------------------------

SuperMap iMobile+Android studio开发入门(二)——超图示例代码运行相关推荐

  1. SuperMap iMobile+Android studio开发入门(一)——环境配置

    背景:开发管线的安卓app,功能初步定为三维显示,属性查询和属性修改. (本文属于小白记录贴,会尽量详细,可供有同样需求的人参考,有问题欢迎留言交流.) 使用软件: SuperMap iMobile ...

  2. Android Studio 开发(二)问题

    目录 一.Mac下de的java路径 二.android studio的编译命令 三.在cocos3.1.5中 android-studio中的build-cfg.json找不到了 四.导入第三方ja ...

  3. Android Studio开发入门-引用jar及so文件

    最近初学安卓开发,因为以前从未用过JAVA,连基本的语法都要从头开始,所以不太顺利.在尝试使用百度语音识别引擎时遇到了如何引用jar及so文件的问题.在GOOGLE加多次尝试之后,找到了一个比较简单的 ...

  4. android 引入 .so,android studio引入so库方法(示例代码)

    在Android Studio中引入so库,只需在app/jniLibs下放入so文件,然后在Module的build.gradle中加入: sourceSets { main { jniLibs.s ...

  5. Android Studio系列教程二:基本设置与运行

    原文出处:http://stormzhang.com/devtools/2014/11/28/android-studio-tutorial2/ 上面一篇博客,介绍了Studio的优点与1.0 RC的 ...

  6. (超多图)基于Android studio开发的一个简单入门小应用(超级详细!!)(建议收藏)

    基于Android studio开发的一个简单入门小应用 一.前言 二.前期准备 三.开发一个小应用 五.运行应用 一.前言 在暑假期间,我学习JAVA基础,为了能早日实现自己用代码写出一个app的& ...

  7. 基于android studio开发多人电话语音视频会议入门实例demo含app下载链接

    目录 说明 视频演示 图文演示 android版本支持 相关下载 说明 这是一个相对完整的客户端+服务器端的项目,适合入门学习研究.包含android摄像头.麦克风使用权限的动态申请,控件的事件绑定, ...

  8. Android Studio系列(二)使用Android Studio开发/调试整个android系统源代码(不定时更新)

    本文是以源码中development/tools/idegen/README作为指导文档,给出了使用Android Studio导入Android源码的方法步骤. 环境: Ubuntu 12.04,o ...

  9. 《Android Studio开发实战》学习(二)- 聊天室

    <Android Studio开发实战>学习(二)- 聊天室 背景 聊天室布局文件的编写 聊天室代码文件的编写 运行结果 背景 在前一篇文章 1中实现了使用Android Studio开发 ...

最新文章

  1. python绘制3维图-python——绘制二元高斯分布的三维图像,
  2. step1 . day4 C语言基础练习之日历
  3. oauth 使用令牌_使用OAuth2令牌的安全REST服务
  4. 每年一波FPGA系列新品,这次Achronix专为AI/ML应用打造……
  5. idea mac 替换_史上最全的IntelliJ IDEA For Mac快捷键!快来收藏吧!
  6. POJ 3090 (欧拉函数) Visible Lattice Points
  7. Jetty提交数据时报java.lang.IllegalStateException: Form too large270468>200000问题解决
  8. 实验2-2-4 计算分段函数[2] (10 分)
  9. linux下搭建apache+mysql+php环境(LAMP)
  10. paip.python错误解决13
  11. 深入浅出数据分析(美 完整中文版)米尔顿
  12. c语言常用例子,C语言经典例子100个
  13. mysql自定义序号_mysql序列_mysql序列号生成器 mysql自定义函数生成序列号的例子...
  14. 职工考勤管理信息系统数据库课设_数据库课程设计职工考勤管理信息系统
  15. 探索SpringCloud+ES实现高性能全文检索
  16. 大数据这么火,具体用用到哪些领域?揭秘大数据十三大具体应用场景
  17. 均衡器--时域均衡,频域均衡,无限长迫零(Zero force\ZF)均衡器,有限长时域迫零(ZF)均衡器,无限长MSE均衡器
  18. 解决DoubanFM第三方客户端UI线程与工作线程交互问题
  19. Axapta program, involve MenuItem:程序定义MenuItem
  20. 硅谷归来,七大感触——You Only Live Once

热门文章

  1. 关于Linux系统诞生发展历程、组成、特点、核心、发行版本
  2. html 字段唯一性校验,使用ModelForm校验数据唯一性
  3. 在线编写最简单的个人简历
  4. 自定义AttributeSet属性
  5. NoSuchMethodException: init [class android.content.Context, interface android.util.AttributeSet...
  6. java骰子代码,java—骰子
  7. 监视和截获指定进程网络数据传输WSockExpert0.6 工具介绍和使用实例
  8. 网银时代,有招更安全
  9. xp系统本地连接服务器,WinXP如何建立本地连接?WinXP建立本地连接的解决方法
  10. 遥感图像处理实践课程任务::基于RSDIPLib搭建遥感图像处理应用程序