【问题标题】:Phonegap app crashes after asking for location permissionPhonegap 应用程序在请求位置许可后崩溃
【发布时间】:2017-01-29 22:50:54
【问题描述】:

当应用程序没有位置权限并且我打开它时,它会请求权限,并且在我授予权限后它会崩溃。如果它有权限,它可以顺利运行。

我的位置代码是这样的。
if(navigator.geolocation){
  navigator.geolocation.getCurrentPosition(
  function(position){
    // on success
    loadMap(position.coords.latitude, position.coords.longitude);
},
function(e){
  // on error
  loadMap(0,0);
}, {maximumAge: 30000, timeout: 5000, enableHighAccuracy: true})

loadMap 函数传递参数,所以我可以创建一个 mapbox 地图。

我正在使用 phonegap 6.4.3 和 cordova 6.4.0 并将其编译为带有 Android 7.1 的虚拟 nexus 5

错误日志

这些是我单击“允许”后收到的错误消息
01-30 18:02:55.545 238 238 E SELinux : avc: denied { find } for service=batterymanager scontext=u:r:untrusted_app :s0:c512,c768 tcontext=u:object_r:battery_service:s0 tclass=service_manager
01-30 18:02:55.662 18458 18502 E libEGL : validate_display:255 错误 3008 (EGL_BAD_DISPLAY)
01-30 18:02:58.131 18458 18458 E cr_LocationProvider:从系统注册位置更新时捕获安全异常。该应用程序没有足够的地理定位权限。
01-30 18:02:58.134 18458 18458 E cr_LocationProvider:从系统注册位置更新时捕获安全异常。该应用程序没有足够的地理定位权限。
01-30 18:02:58.136 18458 18458 E cr_LocationProvider:从系统注册位置更新时捕获安全异常。该应用程序没有足够的地理定位权限。
01-30 18:03:00.577 18458 18458 E AndroidRuntime: 致命异常: main
01-30 18:03:00.577 18458 18458 E AndroidRuntime: 进程: com.phonegap.helloworld, PID: 18458
01-30 18:03:00.577 18458 18458 E AndroidRuntime:主题:主题:{com.cyanogenmod.trebuchet=overlay:system}
01-30 18:03:00.577 18458 18458 E AndroidRuntime: java.lang.RuntimeException: 传递结果失败 ResultInfo{who=@android:requestPermissions:, request=0, result=-1, data=Intent { act=android.content .pm.action.REQUEST_PERMISSIONS(有附加功能)}} 到活动 {com.phonegap.helloworld/com.phonegap.helloworld.MainActivity}:java.lang.NullPointerException:尝试调用虚拟方法 'void org.apache.cordova.CallbackContext .sendPluginResult(org.apache.cordova.PluginResult)' 在空对象引用上
01-30 18:03:00.577 18458 18458 E AndroidRuntime: 在 android.app.ActivityThread.deliverResults(ActivityThread.java:3733)
01-30 18:03:00.577 18458 18458 E AndroidRuntime: 在 android.app.ActivityThread.handleSendResult(ActivityThread.java:3776)
01-30 18:03:00.577 18458 18458 E AndroidRuntime: 在 android.app.ActivityThread.-wrap16(ActivityThread.java)
01-30 18:03:00.577 18458 18458 E AndroidRuntime: 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1412)
01-30 18:03:00.577 18458 18458 E AndroidRuntime: 在 android.os.Handler.dispatchMessage(Handler.java:102)
01-30 18:03:00.577 18458 18458 E AndroidRuntime: 在 android.os.Looper.loop(Looper.java:148)
01-30 18:03:00.577 18458 18458 E AndroidRuntime: 在 android.app.ActivityThread.main(ActivityThread.java:5461)
01-30 18:03:00.577 18458 18458 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
01-30 18:03:00.577 18458 18458 E AndroidRuntime: 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
01-30 18:03:00.577 18458 18458 E AndroidRuntime: 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
01-30 18:03:00.577 18458 18458 E AndroidRuntime: 由: java.lang.NullPointerException: 尝试调用虚拟方法'void org.apache.cordova.CallbackContext.sendPluginResult(org.apache.cordova.PluginResult)空对象引用
01-30 18:03:00.577 18458 18458 E AndroidRuntime: 在 org.apache.cordova.geolocation.Geolocation.onRequestPermissionResult(Geolocation.java:77)
01-30 18:03:00.577 18458 18458 E AndroidRuntime: 在 org.apache.cordova.CordovaInterfaceImpl.onRequestPermissionResult(CordovaInterfaceImpl.java:214)
01-30 18:03:00.577 18458 18458 E AndroidRuntime: 在 org.apache.cordova.CordovaActivity.onRequestPermissionsResult(CordovaActivity.java:508)
01-30 18:03:00.577 18458 18458 E AndroidRuntime: 在 android.app.Activity.dispatchRequestPermissionsResult(Activity.java:6582)
01-30 18:03:00.577 18458 18458 E AndroidRuntime: 在 android.app.Activity.dispatchActivityResult(Activity.java:6460)
01-30 18:03:00.577 18458 18458 E AndroidRuntime: 在 android.app.ActivityThread.deliverResults(ActivityThread.java:3729)
01-30 18:03:00.577 18458 18458 E AndroidRuntime: ... 9 更多

【问题讨论】:

  • 检查你的logcat并在这里发布错误,这样会更清楚
  • 这应该是报错报告。我也在我的手机上试过了,我得到了同样的错误。

标签: android jquery cordova


【解决方案1】:

问题可能是地理定位插件在您使用时尚未准备好。 它应该在“deviceready”事件之后调用。

参考:cordova-plugin-geolocation

【讨论】:

    【解决方案2】:

    确保您已在页面中包含此行:

    <script src="cordova.js"></script>
    

    我遇到了同样的问题,然后意识到我没有包含cordova.js。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-26
      • 2012-04-10
      • 2021-03-05
      • 1970-01-01
      • 2023-01-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多