如果您在下面没有找到需要的问题,请加入Stack Overflow社区参与讨论。
报NOT_YET_SUPPORTED错误码,在部分手机上可能会出现如下错误日志,但不影响正常功能,请您放心使用。
b'08-09 21:23:47.202 30443 18338 E AndroidRuntime: FATAL EXCEPTION: Location_Location_DispatchTaskManager_14' b'08-09 21:23:47.202 30443 18338 E AndroidRuntime: Process: com.huawei.locationsample6, PID: 30443' b'08-09 21:23:47.202 30443 18338 E AndroidRuntime: com.huawei.location.router.dispatch.DispatchException: api interface not register' b'08-09 21:23:47.202 30443 18338 E AndroidRuntime: \tat com.huawei.location.router.dispatch.DispatchThreadPoolExecutor.processRequest(Unknown Source:90)' b'08-09 21:23:47.202 30443 18338 E AndroidRuntime: \tat com.huawei.location.router.dispatch.DispatchThreadPoolExecutor.beforeExecute(Unknown Source:10)' b'08-09 21:23:47.202 30443 18338 E AndroidRuntime: \tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1164)' b'08-09 21:23:47.202 30443 18338 E AndroidRuntime: \tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)' b'08-09 21:23:47.202 30443 18338 E AndroidRuntime: \tat java.lang.Thread.run(Thread.java:923)' b'08-09 21:23:47.202 30443 18338 E AndroidRuntime: FATAL EXCEPTION: Location_Location_DispatchTaskManager_14' b'08-09 21:23:47.202 30443 18338 E AndroidRuntime: Process: com.huawei.locationsample6, PID: 30443' b'08-09 21:23:47.202 30443 18338 E AndroidRuntime: com.huawei.location.router.dispatch.DispatchException: api interface not register' b'08-09 21:23:47.202 30443 18338 E AndroidRuntime: \tat com.huawei.location.router.dispatch.DispatchThreadPoolExecutor.processRequest(Unknown Source:90)' b'08-09 21:23:47.202 30443 18338 E AndroidRuntime: \tat com.huawei.location.router.dispatch.DispatchThreadPoolExecutor.beforeExecute(Unknown Source:10)' b'08-09 21:23:47.202 30443 18338 E AndroidRuntime: \tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1164)' b'08-09 21:23:47.202 30443 18338 E AndroidRuntime: \tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)' b'08-09 21:23:47.202 30443 18338 E AndroidRuntime: \tat java.lang.Thread.run(Thread.java:923)'
Location SDK不支持非华为Android手机返回当前位置的城市、所属区县、街道等具体地址信息。
Android 11更改了应用查询用户在设备上已安装的其他应用以及与之交互的方式。您应用的targetSdkVersion是30或者更高版本,并且集成的Location Kit 6.2.0.300之前版本时,将无法访问HMS Core(APK),并且持续提示升级。
您可以通过以下两种方法解决。
升级Location Kit的SDK至最新版本,最新版本信息请参见版本更新说明。
如果不升级SDK,需要在“AndroidManifest.xml”中manifest下添加<queries>标签。
<manifest ...>
...
<queries>
<intent>
<action android:name="com.huawei.hms.core.aidlservice" />
</intent>
</queries>
...
</manifest>
<queries>标签对工具的要求如下:
因为PRIORITY_NO_POWER属于被动定位,主要监听原生定位的位置,如果获取不到位置信息,可能没有应用发起原生定位请求,导致没有获取到位置信息。
getLastLocation接口是从系统缓存中获取位置信息的,该接口不保证一定可以获取到位置信息。如果获取的位置信息为null,则可能是系统缓存已经被清除;此时先调用requestLocationUpdates接口获取位置信息以刷新缓存,再调用getLastLocation,即可以获取到位置信息。
通过setMockMode(boolean isMockMode)将位置模拟模式设置为true后,定位服务将不再使用GNSS或网络位置,最终返回通过setMockLocation(Location mockLocation)设置的位置信息。需要注意的是,一旦设置为位置模拟模式,将影响该设备上所有使用定位服务的应用的定位功能。因此,当您不再需要进行位置模拟时,请通过setMockMode(boolean isMockMode)将位置模拟模式设置为false。
可以通过mockLocation.getExtras().getBoolean("mockLocation")的返回值来判断当前位置是否为mock位置,返回true则当前位置为mock位置,返回false则为真实位置。
当调用定位服务的接口失败时,可以通过返回值初步判断问题原因。获得接口返回的Task对象,调用addOnFailureListener(),并重写onFailure(Exception e)方法,打印异常信息e.getMessage,异常信息中包含异常错误码和异常描述。具体的错误码含义请参见通用错误码。
调用定位服务接口无法获取位置信息,且根据上述步骤难以定位原因。可以抓取运行日志并选择提交问题,华为支持人员会及时处理。
日志抓取办法如下:
adb logcat –v time > D:\hwlocation.log
同时请您尽可能记录出现问题的设备型号、EMUI版本号、HMS Core版本号、集成的SDK版本号以及复现问题的步骤,以便技术人员可以更快地为您进行技术定位。
定位过程中,由于第三方应用触发了HMS Core(APK)的定位服务能力,为了保障第三方应用的定位功能正常运行,需要用户授权HMS Core(APK)位置权限,此权限的授予与第三方应用权限授予无关。如使用Android Q版本终端,需要授予HMS Core后台获取位置权限(授权弹框中的始终允许)。
应用权限建议选择“始终允许”,才能保证应用在进行后台定位请求时,持续返回正确的数据。
如果对位置的实时性要求较高,推荐使用requestLocationUpdates接口。如果只想收到一次位置信息,可以将LocationRequest接口中setNumUpdates方法参数numUpdates设置为1。
在gradle.properties文件中添加android.jetifier.blacklist=bcprov-jdk15on。
iOS Location SDK提供的是融合定位。一般地,iOS Location SDK会先按照最快的“无网定位”(即离线网络定位)返回一个位置,当有网络连接时,在用“有网定位”(即在线网络定位)更新位置。
网络定位本身又包含基站定位和WIFI定位两种方式,当WIFI模块开启(开启即可,可不连接)时会运用WIFI定位,反之采用基站定位。
在室外环境时,设备会利用A-GPS上网查询卫星星历,在能收到GPS信号的情况下,使用GPS连接卫星(A-GPS用于遍历星历提速)定位。
根据当前信号情况和网络环境,iOS设备可能在上述方式之间反复迭代,没有绝对的步骤和方式,而且随着iOS升级,定位规则可能改变。所以iOS定位结果是无法具体区分来自于GPS定位还是来自于网络定位。
iOS Location SDK定位不支持指定时间间隔和距离间隔,外部不可控,相关说明如下:
iOS Location SDK定位能力是基于苹果原生定位能力进行封装,故iOS Location SDK定位不支持指定时间间隔和距离间隔。
苹果原生定位能力提供了两种定位回调机制。
iOS Location SDK初始定位都是用基站或者无网基站定位,误差在几百米至几公里之间不等。之后,如果无法搜索到WIFI或者卫星信号,就会一直是这个精度返回定位结果。您可以打开WIFI功能(不用连上,只需要打开即可),或者将设备放到开阔的地方以便收到卫星信号。
解决方法:等待一段时间,开启数据流量和设备WIFI模块(定位之后即可关闭),或者到户外进行测试。
这个数据跟定位地点的地理位置相关,在中国大陆、香港特别行政区、澳门特别行政区返回GCJ02坐标;在中国台湾省返回的是WGS84坐标;海外地区,返回的也是WGS84坐标。
iOS 11在定位权限设置上有更新,请您按以下方式进行设置:
在项目的 Info.plist 添加定位权限申请,根据您的业务需求,选择下列方式设置。
iOS 9 - iOS 10 版本:
“NSLocationWhenInUseUsageDescription” 表示应用在前台的时候可以搜到更新的位置信息。
“NSLocationAlwaysUsageDescription” 申请Always权限,以便应用在前台和后台(suspend 或 terminated)都可以获取到位置信息。
iOS 11版本:

“NSLocationWhenInUseUsageDescription”:表示应用在前台的时候可以获取到位置信息。
“NSLocationAlwaysAndWhenInUseUsageDescription” 申请Always权限,以便应用在前台和后台(suspend 或 terminated)都可以获取到位置信息。
如果您的应用需要支持iOS 9及上系统使用定位功能,建议在plist文件中同时添加“NSLocationWhenInUseUsageDescription”、“NSLocationAlwaysUsageDescription”和“NSLocationAlwaysAndWhenInUseUsageDescription”权限声明。

使用iOS Location SDK能力时,要先授权再使用对应功能,避免边授权边使用的情况和迅速在设置中修改定位权限并切换到应用的情况。
朝向和朝向精度值为-1,该情况表示未能成功获取到精度,网络定位不返回朝向信息,请关闭WIFI和蜂窝网络,进行GPS定位,如果成功定位信息仍无法获取到有效的经纬度,检查设备陀螺仪功能。
请耐心等待,该情况大概率出于正常情况,仍在继续回调中,回调时间间隔较长。发生与精度对应的位置偏移,有助于快速收到回调。如果上述方法仍不能解决您的问题,请提工单联系我们。
情况1:【没有手机信号,没有WIFI信号,没有上网】定位只能在户外利用GPS进行,初次定位时间可能很长,需要数分钟之久,之后定位正常。
情况2:【没有手机信号, 有WIFI信号,没有上网】如果之前在周围上过网,下载了附近的热点,则利用无网WIFI定位可以找到位置,否则,和情况1一样。
情况3:【没有手机信号, 有WIFI信号,可以上网】利用WIFI定位找到位置,并且在定位时还会下载大量的周围很大一个区域的所有WIFI热点信息,用于今后无网WIFI定位。
情况4:【有手机信号, 没有WIFI信号,没有上网】如果能收到iOS内置的“重要基站”的信号,则使用这些基站进行无网基站定位,否则,无法定位。
情况5:【有手机信号, 没有WIFI信号,可以上网】使用基站定位联网查询进行定位,同时可能会更新本地“重要基站”信息。