维智 Android 定位SDK

开发指南

创建工程

获取KEY

如何申请 KEY

  1. 创建应用

进入控制台,创建一个新应用。如果您之前已经创建过应用,可直接跳过这个步骤。

创建应用截图
创建应用截图

审核通过后,即可获取密钥 accessKey。

Android Studio 配置工程

新建一个Android工程

新建一个 Empty Activity 的应用工程,创建一个 Android 工程。 可以参考入门指南

集成 SDK

将下载的定位 SDK jar 文件复制到工程(此处截图以官方示例Demo为例子)的 libs 目录下,如果有老版本定位 jar 文件存在,请删除。如图所示:

集成SDK截图

配置 build.gradle 文件

在 build.gradle 文件的 dependencies 中配置导入 jar 包

配置build.gradle截图

实用工具

定位SDK错误码对照表

常量字段 返回值说明
AIR_MODE 1003 因为您开了飞行模式,我们无法获取位置信息。
APPKEY_ILLEGAL 401 Appkey 非法或不存在
APPKEY_PERMISSION_ERROR 403 Appkey 权限异常
CANT_CAL_BACK 404 服务器异常
CANT_CAL_POSITON 1010 定位服务返回定位失败。
CANT_GET_ANY_INFO 1002 我们无法获取任何定位信息,请尝试打开 WI-FI 开关和 GPS 位置服务。
ERROR_CELLINFO 2002 定位时的基站信息错误。
ERROR_INIT 3001 定位初始化时出现异常。
ERROR_START_CLIENT 3002 定位客户端启动失败。
GOT_NULL_PARAM 1005 获取到的请求参数为空,可能获取过程中出现异常。
GOT_ONLY_ONE_WIFI 1004 由于仅扫描到单个 wifi,且没有基站信息。
HTTP_OVERTIME 1009 网络请求超时
ILLEGAL_DEVICE_ID 1011 option 参数非法
MOCK_LOCATION 1006 定位结果被模拟导致定位失败。
ETWORK_UNREACHABLE 2001 无网络,请求服务器过程中的异常,多为网络情况差,链路不通导致。
NO_APPKEY 1008 您尚未配置 AppKey。
NO_PERMISSON 1001 没有定位权限
NO_SIM 1007 由于手机没插 sim 卡且 WIFI 功能被关闭。
PARAMS_ERROR 400 参数异常
PATH_ERROR 404 由于手机没插 sim 卡且 WIFI 功能被关闭。
PATH_ERROR 501 路径异常
SERVER_ERROR 500 服务器异常

Android 6.0 以上权限说明

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

第 1 步,声明目标SDK版本

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

Android Studio:

在build.gradle中声明targetSdkVersion为23。

android {
    compileSdkVersion 23
    buildToolsVersion '23.0.1'
    defaultConfig {
        applicationId "com.wayz.location.demo"
        minSdkVersion 14
        targetSdkVersion 23
        versionCode 1
        versionName "2.5.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

第 2 步,检查并申请定位权限

在运行定位之前需要对定位权限进行检查和申请,示例代码如下:

companion object {
    val permissions = arrayOf(
            Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION
    )
}

private fun checkPermisson() : Boolean {
    if (!EasyPermissions.hasPermissions(this, *MyApp.permissions)) {
        EasyPermissions.requestPermissions(this, "需要申请如下权限", 1, *MyApp.permissions)
        return false
    } else {
        return true
    }
}

第 3 步,用户授权

在请求权限后,系统会弹出相应的Dialog提示用户授予权限,如下图所示:

用户授权弹窗截图

第 4 步,接收回调

用户选择允许或拒绝后,会回调onRequestPermissionsResult方法, 该方法类似于onActivityResult方法。

override fun onRequestPermissionsResult(
        requestCode: Int,
        permissions: Array<out String>,
        grantResults: IntArray
) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults)
    EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this)
}