- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在为 Android Wear 构建一个 Android 应用。为了节省电池电量,我正在尝试使用 Geofences 来跟踪您是否进入或离开某个位置。但我无法让它工作。
首先,我不确定 Android Wear 是否支持地理围栏? (独立?)我有一个包含 GPS 天线的 Huawei watch 2 LTE,并且我已经让 FusedLocationClient 工作,所以我知道 GPS 工作。我的地理围栏代码也在工作电话没有问题。
当我运行代码时出现以下异常:
com.google.android.gms.common.api.ApiException: 1000:
我在 Google API documentation 上找到了这意味着:GEOFENCE_NOT_AVAILABLE
没有给我额外的信息。
这是我为启动和创建地理围栏而编写的服务:
public class GeofencingService extends Service implements OnSuccessListener, OnFailureListener {
private static final String TAG = "GeofencingService";
private static final int NOTIFICATION_ID = 1;
private GeofencingClient mGeofencingClient;
private List<Geofence> mGeofenceList;
private NotificationManager mNotificationManager;
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
mNotificationManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
mGeofencingClient = LocationServices.getGeofencingClient(this);
mGeofenceList = new ArrayList<>();
createGeofences();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
showNofification();
setupGeofence();
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
super.onDestroy();
mNotificationManager.cancel(NOTIFICATION_ID);
}
private PendingIntent getGeofencePendingIntent()
{
Intent intent = new Intent(this, GeofenceBroadcastReceiver.class);
return PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
}
private GeofencingRequest getGeofencingRequest() {
GeofencingRequest.Builder builder = new GeofencingRequest.Builder();
// The INITIAL_TRIGGER_ENTER flag indicates that geofencing service should trigger a
// GEOFENCE_TRANSITION_ENTER notification when the geofence is added and if the device
// is already inside that geofence.
builder.setInitialTrigger(INITIAL_TRIGGER_ENTER | INITIAL_TRIGGER_EXIT);
// Add the geofences to be monitored by geofencing service.
builder.addGeofences(mGeofenceList);
// Return a GeofencingRequest.
return builder.build();
}
private void setupGeofence()
{
try{
Log.i(TAG, "Setting up geofences...");
mGeofencingClient.addGeofences(getGeofencingRequest(), getGeofencePendingIntent()).addOnSuccessListener(this).addOnFailureListener(this);
} catch (SecurityException ex)
{
Log.d(TAG, "Exception: " + ex.getMessage());
}
}
private void createGeofences()
{
Log.i(TAG, "Creating geofence...");
mGeofenceList.add(new Geofence.Builder()
// Set the request ID of the geofence. This is a string to identify this
// geofence.
.setRequestId("Test1")
// Set the circular region of this geofence.
.setCircularRegion(
50.03535,
4.33139,
100
)
.setExpirationDuration(NEVER_EXPIRE)
// Set the transition types of interest. Alerts are only generated for these
// transition. We track entry and exit transitions in this sample.
.setTransitionTypes(GEOFENCE_TRANSITION_ENTER | GEOFENCE_TRANSITION_EXIT)
// Create the geofence.
.build());
}
private void showNofification()
{
Intent appIntent = new Intent(this, MainActivity.class);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, appIntent, 0);
Notification notification = new NotificationCompat.Builder(this, NotificationCompat.CATEGORY_SERVICE)
.setSmallIcon(R.mipmap.ic_launcher)
.setContentTitle(getText(R.string.location_service_title))
.setContentText(getText(R.string.location_service_text))
.setLocalOnly(true)
.setOngoing(true)
.setContentIntent(contentIntent)
.build();
mNotificationManager.notify(NOTIFICATION_ID, notification);
}
@Override
public void onFailure(@NonNull Exception e) {
Log.d(TAG, "Exception: " + e.getMessage());
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
setupGeofence();
}
}, 2000);
}
@Override
public void onSuccess(Object o) {
Log.d(TAG, "Success!");
}
}
Here is also a github link to the example I wrote.
希望有人能帮我解决这个问题,因为我已经尝试了我所知道的一切:)
最佳答案
当您阅读文档并看到错误代码对应于 GEOFENCE_NOT_AVAILABLE
时,加上根据@Mr.Rebot 评论:
"Not all wear devices have the hardware to support this [...]"
您可能会认为您的 Huawei watch 2 设备上的GEOFENCE 不可用。
你也可以问to Huawei support直接确认。
关于安卓磨损 : geofence - ApiException: 1000,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48222022/
我正在使用下面的代码监控地理围栏转换 LocationServices.GeofencingApi .addGeofences(AssistApplication.getApiHelper()
当用户进入定义的地理围栏区域时,我正在使用意向服务创建通知。问题是,当我第一次运行应用程序时,它工作正常,并且我在意向服务上获得待处理意向,但之后有些天(2-3),我没有在意向服务上获得所需的意向。
这个问题在这里已经有了答案: How to check if Location Services are enabled? (24 个答案) 关闭 7 年前。 我正在使用 Android 地理围栏
我已经对这个主题进行了很多天的认真研究......我在这里也看到了很多主题......但不幸的是我找不到解决方案.... 我正在编写一个使用新的 Google API for Geofence 的应用
我尝试从 android 开发人员运行此应用程序:https://developer.android.com/codelabs/advanced-android-kotlin-training-geo
我有一个以Google地理围栏示例代码开头的应用。它运行了好几天,并且我得到了所有预期的过渡意图。但是,过了一段时间(例如3天),该应用程序停止了获取这些意图,我不知道为什么。 创建围栏时,将有效期设
对于后台位置,如果设备进入低功耗模式或后台应用刷新被禁用,而应用程序在后台并收集位置......操作系统会杀死它。然后,即使这些模式被颠倒,直到应用程序再次出现在前台,这些事件才能恢复.... 但是在
如果电源不是问题,那么在 Android 设备(特别是 Nexus 7)上跟踪地理围栏事件的最佳方法是什么。 Geofence api,或者主动轮询 平板电脑永久固定在车辆中并始终通电。所以省电不是问
我的问题与这里的问题基本相同: iOS Geofence, how to handle when inside region when monitoring starts? 我需要一个 Swift 3
我已成功添加带有标志 NEVER_EXPIRE 的地理围栏。一切似乎都运行良好。 但现在在测试时我发现,如果我停止定位服务,地理围栏将按预期停止工作。此外,当我再次启动定位服务时,我之前添加的地理围栏
我已经实现了 geoFence api,并且一切正常。但是有一些问题,我想更多地澄清我的困惑。 下面是一些困惑和问题: 我希望我的用户在进入地理围栏区域时得到通知。我已经按照指南实现了 Geofenc
我正在为 Android Wear 构建一个 Android 应用。为了节省电池电量,我正在尝试使用 Geofences 来跟踪您是否进入或离开某个位置。但我无法让它工作。 首先,我不确定 Andro
我正在制作一个地理围栏应用程序,它必须在设备位于地理围栏之外时不断触发通知,而不仅仅是在退出时。 我已尝试通过 Google android developer training page 中给出的训
随着向 android 8 的过渡,我遇到了一个问题,即当应用程序被终止时,应用程序中的地理围栏不再工作。 我根据 Android 开发人员指南实现了地理围栏,因此没有理由显示任何代码 fragmen
7 天以来,我一直在尝试这样做,但没有结果。问题是 ResultCallback,对于地理围栏我需要 ResultCallback,而对于 LocationSettings 我需要 ResultCal
我正在尝试针对位置感知应用程序测试 GeoFences。我已经获得了多达 11 次连续成功,但通常随之而来的是数十次失败。重新启动设备没有帮助。卸载/重新安装没有帮助。禁用位置,重新启用位置没有帮助。
我正在使用 Geofence API Sample application我让它运行起来,似乎工作正常。我确实对其进行了修改,以使用 BroadcastReceiver 而不是 IntentServi
问题在标题中。如果应用被用户终止,新的 Android Geofences 是否会被删除? 我正在使用新的 Android Geofences (在 2013 年 Google IO 上宣布)。如果用
我无法从服务类添加地理围栏。下面是我的代码: 地理围栏服务: package com.example.admin.reminderapp.services; import android.app.Pe
我开发了一个地理围栏应用程序,它运行正常。但我也有用户告诉我,即使设备没有移动,该应用程序也会报告可重复进入和退出该区域! 该应用程序使用最新的 Google Geofencing API,过渡类型为
我是一名优秀的程序员,十分优秀!