“许可不可用”解决方法

正式许可

公有云许可

使用公有云许可,遇到“许可不可用”等情况,可从以下几个方面检测。

(1). SuperMap Online账号下需要有可用的许可。

(2). 移动设备是否联网,公有云许可使用时,需连接网络,检查移动设备是否开启网络(WIFI或流量),若没开启,开启即可。

(3). 断网时间是否超时,公有云许可断网两小时后自动回收,检查网络是否已断掉超过2小时,若已超时,重新联网激活,即可使用。

(4). 账号是否被占用,一个SuperMap Online账号,同一时间连接的设备数,不能超过购买的许可量,如果账号被其它设备占用,则需占用设备归还许可,或断网超过两小时,回收许可后,方可使用。

(5). 超图许可服务故障,此处情况发生概率较小,如遇到请联系超图公司。Tel:+86-10-59896655。

公有云无账号归还许可

使用公有云无账号归还许可,遇到“许可不可用”的情况,可从以下几个方面检测。

(1). 许可激活时需要联网,功能模块要写,许可序列号要正确,否则激活会失败;

(2). 许可存储在设备中的路径和工程中Environment.setLicensePath()设置的许可路径是否一致;

(3). 由于移动端许可激活后台服务器内部做了一次迁移,用低版本的data.jar包或者license.jar包激活会失败,建议用8.11及以上版本的jar包激活;

(4). 也有可能是出的许可序列号或者许可激活后台出了问题,这时就需要超图出许可和移动端的研发来排查,可以找超图售后的工程师咨询。

私有云许可

使用私有云许可,遇到“许可不可用”情况,可以从以下几个方面检测。

(1). 移动设备是否联网,使用私有云许可时,需连接网络,检查移动设备是否开启,网络(WIFI或流量),若没开启,开启网络。

(2). 移动设备网络与许可服务网络是否在一个网段,私有云许可在局域网中使用,移动设备连接的网络与许可服务网络必须在一个网段。

(3). 许可是否被占用,私有云许可,同一时间,连接的设备数,不能多于购买的许可量。若许可已被其它设备占用,需关闭占用设备的App或关闭占用设备的网络后,方可使用。

(4). 许可服务器是否正常运行,检测许可服务器是否正常运行,若服务器宕机,重启服务器,运行许可中心web 版,重新搭建服务。

离线许可

使用离线许可,遇到“许可不可用”、“许可无效”等情况,可以从以下几个方面检测。

(1). 获取的设备硬件识别码不对造成出的正式许可也错误,最基本的判断该识别码是16位由数字和大写字母构成的;

(2). 许可存储在设备中的路径和工程中Environment.setLicensePath()设置的许可路径是否一致;

(3). 在工程第一次运行时,没有将WiFi开启或者Android设备7.0及以上版本不能联网造成报没有许可;

(4). 由于许可后台原因造成出的正式许可有问题,这时需要咨询超图的售后工程师。

(5). “设备ID获取错误或者多台设备获取ID一致”问题解决方法:

第一步:删除设备中,“内部存储/SuperMap/data/SuperMapKey.ogg”文件;

第二步:打开设备WiFi;

第三步:运行iMobile相关App,重新获取设备ID。(确保上面两步后再运行)。

试用许可

公有云试用许可

使用公有云试用许可,遇到“许可不可用”的情况,可从以下几个方面检测。

(1). 移动设备是否联网,公有云试用许可使用时,需连接网络,检查移动设备是否开启网络(WIFI或流量),若没开启,开启即可。

(2). 断网时间是否超时,公有云试用许可断网两小时后自动回收,检查网络是否已断掉超过2小时,若已超时,重新联网激活,即可使用。

(3). 账号是否被占用,一个SuperMap Online账号,默认分配一套试用许可,仅支持一台设备试用,如果账号被其它设备占用,则测试设备无法使用该账号下的试用许可。占用设备归还许可,测试设备激活后,即可使用。

(4). 超图许可服务故障,此处情况发生概率较小,如遇到请联系超图公司。Tel:+86-10-59896655。

私有云试用许可

私有云试用许可使用时遇到“许可不可用”问题,可从以下方面排查。

(1). 移动设备是否联网,私有云试用许可使用时,需连接网络,检查移动设备是否开启,网络(WIFI或流量),若没开启,开启即可。

(2). 移动设备网络与许可服务网络是否在一个网段,私有云试用许可在局域网中进行,检查移动设备连接的网络是否与许可服务网络在一个网段。

(3). 许可是否过期,私有云试用许可试用期限90天,打开许可服务器,查看许可是否过期。 检验方法:在许可服务器中,运行许可中心web版,浏览器中输入“localhost:9183”,输入用户名和密码,在“许可状态”选项卡中,查看许可是否过期。

(4). 许可是否被占用,一个私有云试用许可,同一时间,只能连接一台移动设备,若许可被占用,则无法使用。关闭占用设备的App或关闭占用设备的网络后,即可使用。

(5). 许可服务器是否正常运行,检测许可服务器是否正常运行,若服务器宕机,重启服务器,运行许可中心web 版,重新搭建服务。

离线试用许可

离线试用许可使用时遇到“许可不可用”或“许可无效”问题,可从以下方面排查。

(1). 许可无效

将试用许可文件“SuperMap iMobile Trial.slm”,以文本方式打开,查看文件中的StartDate(开始时间)和ExpiredData(过期时间)时间是否已过期。

图:验证文件是否过期

如许可文件未过期,查看移动设备系统时间是否正常,即查看是否是当天的时间,如果不是,需调整为正确时间。

根据产品包版本,在超图官网申请对应版本的许可,产品包与许可版本不匹配,会导致许可无效。

  • 试用许可是否过期
  • 系统时间是否有误
  • 许可版本与产品包版本是否匹配

(2). 找不到许可

文件路径是否有误 如果设备中含有许可,还是报没有许可文件,需查看试用许可文件在移动设备中的路径和工程中Environment.setLicensePath()设置的路径是否一致。

若同一个试用许可拷贝到两个移动设备中运行同一个工程,一个正常,一个不可用,先排查上述(2)和(3)中的系统时间和文件路径。将运行不正常的移动设备中的试用许可文件删除,重新拷贝一份到指定许可路径。这个很少见,但也存在拷贝文件出现问题的情况。

  • 文件路径是否有误
  • 文件拷贝是否产生问题
  • Android 7.0及以上设备权限问题

有些Android 7.0及以上的移动设备在Environment.setLicensePath()时会报获取不到设置的路径,虽然在AndroidManifest.xml中已设置读取权限,但是有些7.0设备还是无法读取文件路径,这时需要动态设置文件读取的权限,设置代码如下:

packagecom.imobiletest.bufferanalystbygemotry;
importandroid.Manifest;
importandroid.annotation.TargetApi;
importandroid.content.Intent;
importandroid.content.pm.PackageManager;
importandroid.os.Build;
importandroid.support.v7.app.AppCompatActivity;
importandroid.os.Bundle;
publicclass 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) {
    super.onRequestPermissionsResult(requestCode, permissions,grantResults);
    startMain();
  }
  private void startMain(){
    Intent intent = new Intent();
    intent.setClass(getApplicationContext(), MainActivity.class);
    startActivity(intent);
    finish();
  }
}