开发指南

获取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, Manifest.permission.READ_PHONE_STATE
    )
}

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)
}