最近遇到一个问题,添加地理围栏会随机失败并出现 ApiException,状态代码 13 定义为“错误”,没有提供额外的详细信息。
通常错误代码是特定于地理围栏的,但这似乎是一个普遍的失败。有谁知道为什么 GeofencingClient 会返回状态代码 13?我找不到遇到同样问题的人。
这似乎影响了应用程序的旧版本,之前它可以正常工作。
我已经仔细检查了纬度/经度是否是有效坐标,相同的数据有时可以正常工作。我曾尝试使用不同的 API key 进行初始化,以防 map /位置服务出现问题,但这没有任何区别。
我也试过从
GeofencingClient(context) 到 LocationServices.getGeofencingClient(context) 没有变化。
我试过升级库版本,没有区别。
定义了播放服务版本和 API key 的典型 list 设置;
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version"/>
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="@string/maps_api_key"/>
<service android:name=".GeofenceTransitionsIntentService"/>
这里添加了地理围栏,没有任何结果到达 Intent 服务
private val geofencingClient = GeofencingClient(context)
private val geofencePendingIntent =
PendingIntent.getService(context, 0, Intent(context, GeofenceTransitionsIntentService::class.java), PendingIntent.FLAG_UPDATE_CURRENT)
fun setGeofence(latitude: Double, longitude: Double, radius: Float, geofenceId: String) {
if (ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
val geofenceList = listOf(buildGeofence(latitude, longitude, radius, geofenceId))
geofencingClient.addGeofences(getGeofencingRequest(geofenceList), geofencePendingIntent)?.run {
addOnFailureListener {
// Failed to add geofences
geofenceErrorListener?.invoke("Failed to add Geofence: ${it.message}")
}
}
}
}
这直到最近才成为问题,现在几乎 100% 的时间都在发生。
com.google.android.gms.common.api.ApiException: 13:
编辑:从 PlayServices 版本 17.7.85(在我的设备上)开始,该问题似乎已在 Google 端得到解决
最佳答案
我在使用 Android Q Beta 进行一些测试时发现,如果我的应用具有新的“仅在使用该应用时允许”位置权限,我总会收到此错误。即使应用程序在前台,我也永远无法添加任何位置权限设置为“仅在使用应用程序时允许”的地理围栏,但一旦我将应用程序的位置权限设置为“始终允许”,我就可以添加地理围栏没问题。
不过,我仍然在其他 API 版本上看到这个问题,所以不幸的是它并没有真正完全解决问题。我有一台运行 Android 8.0 的设备和一台运行 Android 9.0 的设备,我仍然偶尔会看到状态错误 #13。我不确定在这些设备上可以做什么,因为它们没有新的“仅在使用应用程序时允许”权限。他们都有完整的位置访问权限。
我添加这个答案是因为它可能会帮助一些运行 Android Q Beta 的用户,或者至少阐明可能导致问题的原因。我确实认为这与最新的 Google Play 服务版本有关,因为我认为我们所做的一切都是正确的。
编辑: 如果有人有兴趣关注,我已经在谷歌的问题跟踪器上添加了一个问题...... https://issuetracker.google.com/issues/135771329
关于android - 添加 Geofence 使 ApiException 状态为 13,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56659325/
我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0
当我使用Bundler时,是否需要在我的Gemfile中将其列为依赖项?毕竟,我的代码中有些地方需要它。例如,当我进行Bundler设置时:require"bundler/setup" 最佳答案 没有。您可以尝试,但首先您必须用鞋带将自己抬离地面。 关于ruby-我需要将Bundler本身添加到Gemfile中吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/4758609/
我有一个ModularSinatra应用程序,我正在尝试将Bootstrap添加到应用程序中。get'/bootstrap/application.css'doless:"bootstrap/bootstrap"end我在views/bootstrap中有所有less文件,包括bootstrap.less。我收到这个错误:Less::ParseErrorat/bootstrap/application.css'reset.less'wasn'tfound.Bootstrap.less的第一行是://CSSReset@import"reset.less";我尝试了所有不同的路径格式,但它
我正在使用Sequel构建一个愿望list系统。我有一个wishlists和itemstable和一个items_wishlists连接表(该名称是续集选择的名称)。items_wishlists表还有一个用于facebookid的额外列(因此我可以存储opengraph操作),这是一个NOTNULL列。我还有Wishlist和Item具有续集many_to_many关联的模型已建立。Wishlist类也有:selectmany_to_many关联的选项设置为select:[:items.*,:items_wishlists__facebook_action_id].有没有一种方法可以
当我的预订模型通过rake任务在状态机上转换时,我试图找出如何跳过对ActiveRecord对象的特定实例的验证。我想在reservation.close时跳过所有验证!叫做。希望调用reservation.close!(:validate=>false)之类的东西。仅供引用,我们正在使用https://github.com/pluginaweek/state_machine用于状态机。这是我的预订模型的示例。classReservation["requested","negotiating","approved"])}state_machine:initial=>'requested
对于作为String#tr参数的单引号字符串文字中反斜杠的转义状态,我觉得有些神秘。你能解释一下下面三个例子之间的对比吗?我特别不明白第二个。为了避免复杂化,我在这里使用了'd',在双引号中转义时不会改变含义("\d"="d")。'\\'.tr('\\','x')#=>"x"'\\'.tr('\\d','x')#=>"\\"'\\'.tr('\\\d','x')#=>"x" 最佳答案 在tr中转义tr的第一个参数非常类似于正则表达式中的括号字符分组。您可以在表达式的开头使用^来否定匹配(替换任何不匹配的内容)并使用例如a-f来匹配一
我目前正在使用以下方法获取页面的源代码:Net::HTTP.get(URI.parse(page.url))我还想获取HTTP状态,而无需发出第二个请求。有没有办法用另一种方法做到这一点?我一直在查看文档,但似乎找不到我要找的东西。 最佳答案 在我看来,除非您需要一些真正的低级访问或控制,否则最好使用Ruby的内置Open::URI模块:require'open-uri'io=open('http://www.example.org/')#=>#body=io.read[0,50]#=>"["200","OK"]io.base_ur
当谈到运行时自省(introspection)和动态代码生成时,我认为ruby没有任何竞争对手,可能除了一些lisp方言。前几天,我正在做一些代码练习来探索ruby的动态功能,我开始想知道如何向现有对象添加方法。以下是我能想到的3种方法:obj=Object.new#addamethoddirectlydefobj.new_method...end#addamethodindirectlywiththesingletonclassclass这只是冰山一角,因为我还没有探索instance_eval、module_eval和define_method的各种组合。是否有在线/离线资
我注意到类定义,如果我打开classMyClass,并在不覆盖的情况下添加一些东西我仍然得到了之前定义的原始方法。添加的新语句扩充了现有语句。但是对于方法定义,我仍然想要与类定义相同的行为,但是当我打开defmy_method时似乎,def中的现有语句和end被覆盖了,我需要重写一遍。那么有什么方法可以使方法定义的行为与定义相同,类似于super,但不一定是子类? 最佳答案 我想您正在寻找alias_method:classAalias_method:old_func,:funcdeffuncold_func#similartoca
我有带有Logo图像的公司模型has_attached_file:logo我用他们的Logo创建了许多公司。现在,我需要添加新样式has_attached_file:logo,:styles=>{:small=>"30x15>",:medium=>"155x85>"}我是否应该重新上传所有旧数据以重新生成新样式?我不这么认为……或者有什么rake任务可以重新生成样式吗? 最佳答案 参见Thumbnail-Generation.如果rake任务不适合你,你应该能够在控制台中使用一个片段来调用重新处理!关于相关公司