地理围栏在Android中完全无法使用吗?

时间:2017-02-06 21:52:55

标签: android geolocation geofencing android-geofence

由于this bug我的团队决定根本不使用地理围栏。 Android中的地理围栏是否有用?

来自错误报告:

  

在所有内部测试设备上,一切都运行正常,调试和   发布版本。但是,对于那里的一些用户,我们会收到崩溃报告   这表明API存在问题:

Fatal Exception: java.lang.SecurityException: Invalid API Key for package = de.stocard.stocard .Status code received = -1
       at android.os.Parcel.readException(Parcel.java:1620)
       at android.os.Parcel.readException(Parcel.java:1573)
       at com.google.android.gms.common.internal.zzu$zza$zza.zza(Unknown Source)
       at com.google.android.gms.common.internal.zzd.zzqz(Unknown Source)
       at com.google.android.gms.internal.zzpw$zzc.zzapl(Unknown Source)
       at com.google.android.gms.internal.zzpw$zzf.run(Unknown Source)
       at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:423)
       at java.util.concurrent.FutureTask.run(FutureTask.java:237)
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
       at com.google.android.gms.internal.zzrn.run(Unknown Source)
       at java.lang.Thread.run(Thread.java:818)
     

这种情况发生在Android版本的4.4.2到7.0之间,没有   明显的模式。这同样适用于设备型号和   制造商:许多和多个制造商和型号。

这听起来像一个非常严重的Heisenbug。

更新

在Android中进行地理围栏似乎有两种不同的方法:

  1. 使用Awareness[.fence] API
  2. 使用location Geofence API
  3. 我们需要使用Awareness API来获得我们想要的功能和电池友好性。

    注意:

    由于“主要基于意见”,我看到一次近距离投票。所以,让我明确一点,我不希望得到不支持的意见答案。我想要事实,参考或具体的专业知识。我有完成研究引用随机崩溃错误,没有可靠的解决方法。我希望其他人注意到他们已经成功实施了地理围栏并且具有:

    1. 他们的应用程序从未遇到此错误的证据(从未捕获过Invalid API Key for package的良好崩溃报告)
    2. 已经看到此错误并已成功实施修复
    3. 从未见过这个错误

1 个答案:

答案 0 :(得分:1)

您链接的错误已包含所有信息,不是吗?

  

我们的检查中存在一个错误,当有网络错误进行身份验证时,有时会抛出此SecurityException。该修补程序将在下一版Google Play服务中推出。

     

目前,最好的解决方法是在您调用GoogleApiClient.connect()的线程上设置UncaughtExceptionHandler。对于大多数人来说,这将在主线程上,您可以通过Looper.myLooper()。getThread()获得。

<强>更新

好吧,回答你的问题“Android中的地理围栏是否完全无法使用?”,我会说不,它不是“完全”无法使用,但显然包含一些问题。

由于这些错误,您是否应该根本不使用地理围栏?我想这在很大程度上取决于用例,而且确实是一个基于意见的问题。与移动设备一样,如果有效,您永远无法100%确定。您的手机可能没有信号,即使代码中没有错误,由于各种原因,它仍可能无法获得有关某个位置的通知。在移动设备上,它是关于如何处理错误的。

我将实现您想要实现的任何内容,尝试执行错误标记(UncaughtExceptionHandler)中建议的操作以捕获错误并在应用程序中实现分析/崩溃报告,以便您至少获得有关如何通常情况下这确实发生在现场。

向您的用户明确指出,由于底层系统,您的应用的地理围栏功能始终无法100%保证,我认为他们仍然乐意使用该功能。可能在您的应用或主页上的某个地方有一些常见问题解答,可以解决已知问题。希望这可以帮助你做出决定