更新到Google Play Services 6.5.87后,由于缺少LocationCLient类,我的应用程序无法编译.
的文档链接 是在瞬间损坏(404未找到)
我该如何解决?我想收到位置更新,使用地理围栏等.
android location google-play-services android-geofence fusedlocationproviderapi
我有一个以Google的地理围栏示例代码开头的应用.它可以工作几天,我得到了所有过渡意图,正如我预期的那样.然而,经过一段时间,比如3天,应用程序停止了这些意图,我不知道为什么.
当我创建我的围栏时,我将到期时间设置为Geofence.NEVER_EXPIRE
这是我的IntentService,我在它停止工作之前获得转换意图:
public class ReceiveTransitionsIntentService extends IntentService {
@Override
protected void onHandleIntent(Intent intent) {
Intent broadcastIntent = new Intent();
broadcastIntent.addCategory(GeofenceUtils.CATEGORY_LOCATION_SERVICES);
// First check for errors
if (LocationClient.hasError(intent)) {
...handle errors
} else {
// Get the type of transition (entry or exit)
int transition = LocationClient.getGeofenceTransition(intent);
// Test that a valid transition was reported
if ((transition == Geofence.GEOFENCE_TRANSITION_ENTER)
|| (transition == Geofence.GEOFENCE_TRANSITION_EXIT)) {
// Post a notification
NEVER GETS HERE
} else {
...log error
}
}
}
} …Run Code Online (Sandbox Code Playgroud) 我在onAddGeofencesResult(int statusCode, String[] geofenceRequestIds)回调中遇到错误statusCode = 1000.
我启用了GPS和WiFi.我也有Google Play服务,我可以跟踪我的位置并请求更新.为什么我无法添加地理围栏?我甚至无法从文档示例应用程序添加地理围栏.我收到以下Toast消息:
"添加地理栅栏:失败,错误代码1000 GeofenceRequestIds = [1,2,1,2]"
从文档(statusCode 1000):
public static final int GEOFENCE_NOT_AVAILABLE
地理围栏服务现在不可用.通常这是因为用户在设置>位置访问中关闭了位置访问权限.
常数值:1000(0x000003e8)
android geolocation android-location google-play-services android-geofence
是否有可能获得用户在位置设置选项下的三种模式中选择的位置模式的信息,即
1.准确度高
2.电池节省
3.仅限GPS
我想以编程方式检查用户是否选择了高精度模式,如果没有,则自动启用它.可能吗 ?请指教.
从 Android 11 开始,面向 SDK 30+ 的应用不会向用户显示多次向应用授予后台位置权限的选项。如果最初未授予,则需要用户转到设置页面。 我们如何将用户带到正确的设置页面?
当您的应用中的某项功能在运行 Android 11 或更高版本的设备上请求后台位置时,系统对话框不包含用于启用后台位置访问的按钮。为了启用后台位置访问,用户必须在设置页面上为您的应用程序的位置权限设置始终允许选项,如有关如何请求后台位置的指南中所述。
https://developer.android.com/about/versions/11/privacy/location#change-details
授予后台位置的设置选项的用户可见标签(例如,图 3 中的始终允许)。您可以调用getBackgroundPermissionOptionLabel() 来获取此标签。此方法的返回值已本地化为用户的设备语言首选项。
https://developer.android.com/training/location/permissions#request-location-access-runtime
虽然 Android 提供了一个新的 API 来获取此设置页面标签,但没有记录的 API 可以直接调出此设置页面。您最接近的是调出特定于应用程序的设置页面,如下所述。从那里,用户必须至少执行两次点击才能深入到“权限”->“位置”以启用后台访问。这是一个繁重的过程,许多用户将无法完成。
在这个问题中已经记录了很长时间没有打开设置页面的 API,但在 Android 11 发布时更为重要,因为没有其他方式授予后台权限。
如何以编程方式打开 Android Marshmallow 上特定应用程序的权限屏幕?
它能够使用户以正确的设置页面中的第一次用户使用这样的代码问: requestPermissions(arrayOf(Manifest.permission.ACCESS_BACKGROUND_LOCATION), PERMISSION_REQUEST_BACKGROUND_LOCATION)。这只会工作一次。如果用户拒绝该权限(或什至意外回击或未授权就离开屏幕),这将永远不会再起作用,并且用户必须如上所述手动向下钻取设置。
除了指示他们在“设置”中寻找正确的页面之外,应用程序是否真的没有办法在初始拒绝后帮助用户授予后台位置权限?
我错过了什么吗?如果没有,这不是 Android 11 的主要可用性问题吗?
在第一次提示中触发正确设置页面所需的完整代码示例,但无法再次执行此操作:
if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
if (checkSelfPermission(Manifest.permission.ACCESS_BACKGROUND_LOCATION)
!= PackageManager.PERMISSION_GRANTED
) {
if (shouldShowRequestPermissionRationale(Manifest.permission.ACCESS_BACKGROUND_LOCATION)) {
val builder =
AlertDialog.Builder(this)
builder.setTitle("This app needs background location access")
builder.setMessage("Please grant location access so this app can detect beacons in the …Run Code Online (Sandbox Code Playgroud) android location android-permissions android-geofence beacon
我正在使用内置的地理围栏API(播放服务),并且结果好坏参半.看起来在设置地理围栏之后,即使GPS打开,进入/退出的通知也非常不一致,具有最新位置(连接了LocationClient,在后台运行.)我开始监控(轮询)位置变化和调试文本字段中的距离,并且即使基于设备注册的位置和地理围栏的位置(我在技术上是在地理围栏的内部/外部),通常有时会触发通知,有时也不会.有什么方法可以让它更具可预测性?我几乎想要放弃这个api并根据设备位置的轮询实现我自己的(电池耗尽)地理围栏.
我正在编写一个应用程序,当有人在正在安装的应用程序的生命周期内进入/退出多个站点时,需要使用地理围栏.
我的地理围栏实现(非常类似于下面的第二个链接)在我第一次安装应用程序时工作正常,无论是在移入/移出地理围栏时还是在使用模拟位置进行模拟时,都会重新启动设备.
在重新启动时,模拟位置或实际上物理移入和移出地理围栏似乎都会触发事件并将未决意图发送到我的广播接收器.
我已经查看了以下三个链接,并且还阅读了相当多的文档,但我无法找到一个明确的答案,直接说注册地理围栏持续存在或重启后不会持续存在.
这些是我在堆栈溢出时查看的链接: Android地理围栏是否能够在重启时幸存?
Android Geofences是否在删除/过期之前保持活动状态,或者直到我的PendingIntent启动为止
如果有人碰巧知道他们是否坚持重新启动后的答案,或者如果他们没有解决问题,那将非常感谢!我目前的最后一个希望是为BOOT_COMPLETED创建一个监听器,并在启动时重新注册它们,但id更喜欢只在必要时才这样做.
非常感谢提前!
编辑:虽然我没有找到明确的(书面)答案,但我很确定TonyC先生发布的内容是正确的,并选择了解决方案.非常感谢TonyC!
如果有人想看到我的解决方案,我会在设备启动时监听启动完成操作,然后重新注册我需要的所有地理围栏.
这是显而易见的:
<!-- Listen for the device starting up -->
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<receiver android:name="com.YOUR.PACKAGE.geofence.BootCompleteReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
然后为它创建一个广播接收器,它将在启动时重新注册地理围栏:
package com.YOUR.PACKAGE.geofence;
import android.app.PendingIntent.CanceledException;
import android.content.Context;
import android.content.Intent;
import android.support.v4.content.WakefulBroadcastReceiver;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesUtil;
import com.google.android.gms.location.Geofence;
public class BootCompleteReceiver extends WakefulBroadcastReceiver
{
private static final String TAG = "BootCompleteReceiver";
@Override
public void onReceive(Context context, Intent intent)
{
//Do what you want/Register Geofences
}
}
Run Code Online (Sandbox Code Playgroud)
同样值得注意的是,如果您在启动时处于地理围栏内,那么一旦注册了地理围栏,这通常会触发地理围栏的未决意图.
因此,例如,如果地理围栏启动应用程序,那么当您启动恰好位于地理围栏中的设备时,一旦启动完整广播接收器已注册地理围栏,它也将打开应用程序,并且位置服务已经解决了您的位置是.
希望对某人有所帮助.
android geofencing google-play-services android-geofence location-client
我一直在测试新的Google Play Geofencing服务API.
我从Android开发者网站下载了示例代码.接下来,我在Android设备上运行示例代码(Galaxy Note 2).我将办公室的地理位置和半径设置为10米,但是当我走到办公室时,什么也没发生.
在运行示例代码时,我注意到的一件事是,当我已经在地理围栏范围内然后添加地理围栏时LocationClient,没有任何反应.
我已经阅读了LocationClient类文档,并找到了以下段落:
如果用户禁用了网络位置提供程序,则地理围栏服务将停止更新,将删除所有已注册的地理围栏,并通过提供的待处理意图生成意图.在这种情况下,
hasError(Intent)返回true并getErrorCode(Intent)返回GEOFENCE_NOT_AVAILABLE."
所以我打开WiFi,然后走到我的办公室(在地理围栏内),然后我收到通知"geofence进入".
我有以下问题:
地理围栏是否仅适用于WiFi?
为什么我的3G网络提供的位置不起作用?
这是示例代码中的错误吗?
或者这是我的错误?
我正在尝试为Android应用程序添加地理围栏.我在日志中注意到以下内容:
07-04 11:41:19.201 1945-2271/com.google.android.gms.persistent W/GeofencerStateMachine: Ignoring addGeofence because network location is disabled.
我还注意到,当我在系统设置中启用"高精度"模式时,它可以工作(这被称为GPS,Wi-Fi,蓝牙或蜂窝网络).它之前是"仅设备"模式,仅限GPS.
这是地理围栏的预期功能吗?如果用户的设备处于"高精度"模式,它们是否只能工作?
如果我有这两个地理围栏,在注册这些地理围栏之后,当我进入或退出这些圈子的圆周时,我会得到通知.但是,如果我正在通过公共区域,即从一圈到另一圈,我不希望我的应用程序发送通知.
可能吗?如果是这样,那怎么样?

android-geofence ×10
android ×9
geofencing ×3
location ×3
gps ×2
android-maps ×1
beacon ×1
geolocation ×1