SuperMap iMobile for Android许可使用
>作者:xinxin
使用SuperMap iMobile for
Android需要对应的许可,其分为使用许可和正式许可。下面主要分享怎么使用试用许可、激活正式许可和许可不可用的一些解决方法。
####1、
试用许可
配置iMobile的试用许可比较简单,步骤如下:
1)
首先,用邮箱在超图官网上https://www.supermapol.com/web/pricing/triallicense申请移动端的试用许可,申请许可界面如下:
2)
信息填完后点提交,弹出申请成功的界面,该试用许可在Android、IOS平台通用,且不绑定设备,如下图:
3)
将申请到的有效期90天的试用许可SuperMap
iMobile
Trial.slm文件拷贝到移动设备sdcard的某个路径下(如/sdcard/SuperMap/license/目录下);
4)
在工程代码中先获取设备的根目录,然后在设置许可具体路径,代码如下:
String
rootPath =
android.os.Environment.getExternalStorageDirectory().getAbsolutePath();
Environment.setLicensePath(rootPath
+ "/SuperMap/license/")
;
只要代码中设置的许可目录和设备中存储许可的目录一致即可,这样试用许可就配置好了,可以正常开发了。
####2、
正式许可
在使用正式许可前需要许可激活,许可激活分为在线激活和离线激活。
(1)在线激活
a.
用户和超图销售签订购买合同后,通过销售渠道根据合同中的购买许可个数出一个许可序列号发给用户;
b.
用许可序列号在线激活许可,如果这个许可序列号里面有20个正式许可,那只能在20台移动设备上用这个序列号在线激活,即在移动设备上在线激活一个,序列号中的许可少一个;
c.
实现在线激活代码如下,在线激活时只能写已经买了的模块,否则序列号中由于没有该模块会造成在线激活失败;
public
void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
//设置存放许可文件的路径
String
rootPath =
android.os.Environment.getExternalStorageDirectory().getAbsolutePath();
Environment.setLicensePath(rootPath
+ "/SuperMap/License");
Environment.initialization(this);
//设置申请许可的模块
ArrayList
modules = new
ArrayList();
modules.add(Module.Core_Runtime);
modules.add(Module.Navigation_Runtime);
modules.add(Module.Realspace_Runtime);
//设置许可激活回调
LicenseManager.getInstance().setActivateCallback(new
LicenseActivationCallback() {
@Override
public
void activateSuccess(LicenseStatus newLicenseStatus)
{
Toast.makeText(context,
"许可激活成功",
Toast.LENGTH_LONG).show();
}
@Override
public
void activateFailed(String errorMsg)
{
Toast.makeText(context,
"许可激活失败",
Toast.LENGTH_LONG).show();
}
});
//在线激活设备,传入用户序列号和需要申请的模块列表
LicenseManager.getInstance().activateDevice("用户序列号",
modules);
}
d.
在线激活的正式许可会在上面代码中设置的路径中生成,在工程开发的时候设置该许可路径即可。
PS:用户在写代码在线激活时要确定自己买了什么模块,不能在代码中多写模块,否则激活失败,其次序列号的不能写错。
(2)
离线激活
a.
用户通过代码Environment.
getDeviceID()获取移动设备硬件的识别码,该识别码是一串16位的数字和大写字母构成的;
b.
将该硬件设备的识别码通过销售渠道得到一个对应的正式许可文件.slm;
c.
用户拿到这个正式许可后拷贝到生成硬件识别码的那台移动设备上,只有放在那台设备上才能使用,即要一一对应;
d.
在工程代码中环境初始化时设置许可的路径即可。
PS:生成的移动设备硬件的识别码是有16位数字和大写字母构成的,否则生成的正式许可是错误的。
####3、
许可在线与离线激活区别
(1)
从6R到9D版本都可以用离线激活正式许可,而从7C版本开始支持在线许可激活;
(2)
正式许可激活的时候需要开启WiFi,保证可以联网(用流量也可以);离线激活的正式许可在工程中第一次使用时需要开启WiFi,Android设备7.0以下版本可以不联网,7.0及以上版本需要联网;
(3)
在线许可激活可以先买许可,在买移动设备,然后相应的设备上激活;离线许可激活需要先买移动设备,得到对应硬件识别码,然后根据识别码买许可,所以建议大家用在线激活方式。
####4、
许可不可用
(1)
试用许可不可用
在使用试用许可遇到许可不可用时从以下方面去排查,解决的概率很大。
a.
试用许可是否已过期,判定方法可以将它用txt打开查看里面的StartDate(开始时间)和ExpiredData(过期时间)的具体时间是否已过期;
b.如果能确定是刚申请不久的试用许可还报许可过期,那就要查看测试设备的系统时间是否正常,即查看是否是当天的时间,如果不是在设备中设置好;
c.
如果设备中含有许可,但是它还是报没有许可文件,就要查看试用许可文件放在测试设备中的路径和工程中Environment.setLicensePath()设置的是否一致;
d.如果有人遇到同一个试用许可拷贝到两个测试设备中测试同一个工程,一个运行正常,一个报许可不可用时,先排查b和c中的步骤,然后将运行不正常的那个设备中的试用许可删除,然后重新拷贝一份进去,这个很少见,但也会在拷贝的时候出问题;
e.有些7.0以上的移动设备在Environment.setLicensePath()时会报获取不到设置的路径,虽然设备中的文件在AndroidManifest.xml中设置了读取权限,但是在有些7.0设备还是无法读取文件路径,这时需要动态设置文件读取的权限,设置代码如下:
package
com.imobiletest.bufferanalystbygemotry;
import
android.Manifest;
import
android.annotation.TargetApi;
import
android.content.Intent;
import
android.content.pm.PackageManager;
import
android.os.Build;
import
android.support.v7.app.AppCompatActivity;
import
android.os.Bundle;
public
class PermissionActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_permission);
requestPermisson();
}
@TargetApi(23)
private void requestPermisson() {
// 版本判断
if (Build.VERSION.SDK_INT >= 23) {
// 检查是否拥有权限
String[] permissions =
{Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.ACCESS_FINE_LOCATION};
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;
}
}
if(!isBreak)
startMain();
}
}
@TargetApi(23)
@Override
public void onRequestPermissionsResult(int requestCode, String[]
permissions, int[] grantResults) {
// TODO Auto-generated method stub
super.onRequestPermissionsResult(requestCode, permissions,
grantResults);
startMain();
}
private void startMain(){
Intent intent = new Intent();
intent.setClass(getApplicationContext(), MainActivity.class);
startActivity(intent);
finish();
}
}
(2)
在线许可激活
a.
在线激活时需要联网,功能模块要写和许可序列号要正确,否则激活会失败;
b.
许可存储在设备中的路径和工程中Environment.setLicensePath()设置的许可路径是否一致;
c.
由于移动端许可激活后台服务器内部做了一次迁移,用低版本的data.jar包或者license.jar包激活会失败,建议用8.11及以上版本的jar包激活;
d.
也有可能是出的许可序列号或者许可激活后台出了问题,这时就需要超图出许可和移动端的研发来排查,可以找超图售后的工程师咨询。
(3)
离线许可激活
a.
获取的设备硬件识别码不对造成出的正式许可也错误,最基本的判断该识别码是16位有数字和大写字母构成的;
b.
许可存储在设备中的路径和工程中Environment.setLicensePath()设置的许可路径是否一致;
c.
在工程第一次运行时,没有将WiFi开启或者Android设备7.0及以上版本不能联网造成报没有许可;
d.
由于许可后台原因造成出的正式许可有问题,这时需要咨询超图的售后工程师。
备注:为了方便用户使用,在技术资源中心(support.supermap.com.cn)网页的移动GIS示例代码中有:
1)获取设备硬件识别码的工程代码和apk;
2)在线许可激活的工程代码和apk;
3)验证正式许可是否正常的工程代码和apk;
具体地址链接:
http://support.supermap.com.cn/product/CodeLibrary.aspx?PRODUCT_TYPE=4#pro_name
网页截图如下: