在 IBM MobileFirst Platform 上获取位置时出错

Posted

技术标签:

【中文标题】在 IBM MobileFirst Platform 上获取位置时出错【英文标题】:Error getting location on IBM MobileFirst Platform 【发布时间】:2018-11-05 07:06:03 【问题描述】:

我正在 ibm mobile first 平台上开发一个移动应用程序。我使用的是 7.0 版。我正在尝试获取android设备的位置信息,但是虽然我尝试了几种方法,但我没有得到位置信息。 我在 android 清单文件中的权限是正确且完整的。我的代码和我在下面得到的 logcat 错误。谢谢。

我的代码:

var showPosition = function(position) 
    WL.Logger.debug("got a position");
    var latitude = Number(position.coords.latitude).toFixed(2);
    var longitude = Number(position.coords.longitude).toFixed(2);
    alert('<b>Longitude:</b> ' + position.coords.longitude + '<b>Latitude:</b> ' + position.coords.latitude);
    //$("#currentLocation").text(latitude + " / " + longitude);

;

var positionError = function(err)  
    WL.Logger.debug("failed to get  a position");
    $("#status").text("position error" + err); 

;

WL.Device.Geo.acquirePosition(showPosition, positionError, 
        timeout : 30000,
        enableHighAccuracy: true,
        maximumAge:15000
    ); 

Logcat 错误:

V/GpsLocationProvider(  918): reportStatus status: 3
V/GpsLocationProvider(  918): reportStatus status: 1
I/System.out( 3766): IntentService[CrashUploaderService] calls detatch()
I/com.dropbox.android.exception.d( 3766): Error uploading log:
I/com.dropbox.android.exception.d( 3766): dbxyzptlk.db240408.I.h: 
javax.net.ssl.SSLPeerUnverifiedException: No peer certificate
I/com.dropbox.android.exception.d( 3766):       at 
dbxyzptlk.db240408.H.y.a(panda.py:424)
I/com.dropbox.android.exception.d( 3766):       at 
dbxyzptlk.db240408.H.y.a(panda.py:346)
I/com.dropbox.android.exception.d( 3766):       at 
dbxyzptlk.db240408.L.K.a(panda.py:472)
I/com.dropbox.android.exception.d( 3766):       at 
com.dropbox.android.exception.d.a(panda.py:129)
I/com.dropbox.android.exception.d( 3766):       at 
com.dropbox.android.exception.d.a(panda.py:52)
I/com.dropbox.android.exception.d( 3766):       at     
com.dropbox.android.exception.CrashUploaderService.onHandleIntent 
(panda.py:33)
I/com.dropbox.android.exception.d( 3766):       at 
android.app.IntentService$ServiceHandler.handleMessage 
(IntentService.java:65)
I/com.dropbox.android.exception.d( 3766):       at 
android.os.Handler.dispatchMessage(Handler.java:102)
I/com.dropbox.android.exception.d( 3766):       at 
android.os.Looper.loop(Looper.java:145) 
I/com.dropbox.android.exception.d( 3766):       at 
android.os.HandlerThread.run(HandlerThread.java:61)
I/com.dropbox.android.exception.d( 3766): Caused by: 
javax.net.ssl.SSLPeerUnverifiedException: No peer certificate
I/com.dropbox.android.exception.d( 3766):       at 
com.android.org.conscrypt.SSLNullSession.getPeerCertificates 
(SSLNullSession.java:104)
I/com.dropbox.android.exception.d( 3766):       at 
org.apache.http.conn.ssl.AbstractVerifier.verify (AbstractVerifier.java:93)
I/com.dropbox.android.exception.d( 3766):       at 
dbxyzptlk.db240408.L.Q.createSocket(panda.py:173)
I/com.dropbox.android.exception.d( 3766):       at 
org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection 
(DefaultClientConnectionOperator.java:214)
I/com.dropbox.android.exception.d( 3766):       at 
org.apache.http.impl.conn.AbstractPoolEntry.open 
(AbstractPoolEntry.java:167)  
I/com.dropbox.android.exception.d( 3766):       at 
org.apache.http.impl.conn.AbstractPooledConnAdapter.open 
(AbstractPooledConnAdapter.java:125)
I/com.dropbox.android.exception.d( 3766):       at 
org.apache.http.impl.client.DefaultRequestDirector.executeOriginal 
(DefaultRequestDirector.java:1312)
I/com.dropbox.android.exception.d( 3766):       at 
org.apache.http.impl.client.DefaultRequestDirector.execute 
(DefaultRequestDirector.java:702)
I/com.dropbox.android.exception.d( 3766):       at 
org.apache.http.impl.client.AbstractHttpClient.execute 
(AbstractHttpClient.java:694)
I/com.dropbox.android.exception.d( 3766):       at 
org.apache.http.impl.client.AbstractHttpClient.execute 
(AbstractHttpClient.java:516)
I/com.dropbox.android.exception.d( 3766):       at 
org.apache.http.impl.client.AbstractHttpClient.execute 
(AbstractHttpClient.java:494)
I/com.dropbox.android.exception.d( 3766):       at 
dbxyzptlk.db240408.H.y.a(panda.py:394)
I/com.dropbox.android.exception.d( 3766):       ... 9 more

【问题讨论】:

如果您转到设置 -> 应用程序 -> -> 权限并启用位置权限(如果还没有的话)怎么办?此外,如果您在建筑物外尝试应用程序会怎样 - 假设这是获取地理坐标的问题。 感谢您的回复。我的设备有此应用程序的位置权限。我目前的环境中也有 GPS 信号。 先生。正如你所说,Vivin 在我离开大楼时能够获得位置信息。感谢您的帮助。 尝试更改定位模式,例如高精度、省电和仅设备,您可能会在建筑物内获得位置 【参考方案1】:

高精度设置使用和查找 GPS 信号以及网络、wifi 进行位置三角测量。有时人们知道,当无法获得 GPS 锁定时,不要在室内工作。

在户外尝试应用程序,或回退到主要依靠蜂窝网络获取位置的较低精度模式。这应该会给你在室内更好的结果。

【讨论】:

很遗憾,我获取位置的问题没有完全恢复。在许多不同的 Android 版本中,我无法在我的实验中获得 GPS 信号。还有一个有趣的情况:我在我的移动设备上安装了一个名为 GPS Test 的应用程序。此应用程序测试您是否可以从您的环境中接收 GPS 信号。当我在收到 GPS 测试应用程序的信号后立即尝试从我自己的应用程序中获取坐标时,我可以在几秒钟内接收到坐标而没有任何问题。有人可以帮忙吗?

以上是关于在 IBM MobileFirst Platform 上获取位置时出错的主要内容,如果未能解决你的问题,请参考以下文章

IBM Mobilefirst 和 IBM Bluemix

在 IBM Containers 上运行 MobileFirst 服务器

Eclipse 氧气找不到 IBM MobileFirst Studio

IBM MobileFirst 服务器预览

IBM MobileFirst 8.0 Neon 插件

IBM MobileFirst Platform 中的证书固定