相关疑难解决方法(0)

Android Geofence最终停止获得过渡意图

我有一个以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)

android-geofence

33
推荐指数
1
解决办法
2万
查看次数

如何提高Android地理围栏进入/退出通知的一致性?

我正在使用内置的地理围栏API(播放服务),并且结果好坏参半.看起来在设置地理围栏之后,即使GPS打开,进入/退出的通知也非常不一致,具有最新位置(连接了LocationClient,在后台运行.)我开始监控(轮询)位置变化和调试文本字段中的距离,并且即使基于设备注册的位置和地理围栏的位置(我在技术上是在地理围栏的内部/外部),通常有时会触发通知,有时也不会.有什么方法可以让它更具可预测性?我几乎想要放弃这个api并根据设备位置的轮询实现我自己的(电池耗尽)地理围栏.

android android-maps-v2 android-geofence

24
推荐指数
1
解决办法
1万
查看次数

Android地理围栏是否能够重启?

系统是持久存在还是我必须在重启后再次添加它们?我在https://developer.android.com/training/location/geofencing.html的文档中没有找到任何相关信息.

android geofencing android-geofence

14
推荐指数
2
解决办法
3690
查看次数

LocationManager.PROVIDERS_CHANGED_ACTION不适用于API 26及更高版本

我正在使用以下代码来获取位置开/关事件.

<receiver
    android:name=".receivers.GpsReceiver"
    android:enabled="true">
    <intent-filter>
        <action android:name="android.location.PROVIDERS_CHANGED" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)

我正在开发基于地理围栏的应用程序.基于仅在需要时重新注册地理围栏,我们必须在应用程序收到GEOFENCE_NOT_AVAILABLE警报后重新注册地理围栏.这通常发生在禁用NLP(Android的网络位置提供程序)之后.

通过使用此广播接收器,我在启用Android的网络位置提供程序时重新注册了地理围栏.

但是从API级别26开始,这个广播接收器永远不会工作.请参阅 后台执行限制.

那么如何在API 26及更高版本中实现相同的任务呢?

注意:即使app在后台,我也需要重新注册地理围栏.

android broadcastreceiver

14
推荐指数
2
解决办法
2454
查看次数

Android Geofences是否在删除/过期之前保持活动状态,或者直到我的PendingIntent启动为止

我即将实现地理围栏的功能,在我完成任何认真的工作之前,我需要知道在第一次转换后地理围栏是否仍然有效.

该功能的核心是:

每次我在点P的x米范围内(称之为区域A),我都希望动作B出现.

我需要知道的是

  • 我是否只需要添加一个地理围栏,Geofence.NEVER_EXPIRE并确保每次进入指定区域都会获得PendingIntent,无论是否经过时间,重新启动等等

要么

  • 我退出A区后是否必须重新注册此地理围栏以便在下次进入A区时收到通知?

我希望前者是这样的

android geofencing google-play-services android-geofence location-client

8
推荐指数
2
解决办法
6224
查看次数

仅在需要时重新注册地理围栏

根据Android地理围栏文档,如果发生以下情况,应重新注册地理围栏:

  • 设备重启。

解决方案:添加地理围栏时,应用程序应在内部存储地理围栏(SharedPreferences)。然后侦听设备的启动完成操作,然后重新注册存储的地理围栏。

  • 该应用程序已卸载并重新安装。

解决方案:用户应再次创建地理围栏或将其远程存储,然后在应用程序首次打开时进行检索。

  • 该应用程序的数据已清除。

解决方案:用户应再次创建地理围栏或将其远程存储,然后在应用程序首次打开时进行检索。


但是,在以下情况下,我不知道该怎么办,请您指教?

  • Google Play服务数据已清除。我如何发现这种情况?

  • 该应用程序已收到GEOFENCE_NOT_AVAILABLE警报。通常会在禁用NLP(Android的网络位置提供程序)后发生。不确定在哪里收到此“警报”

android android-geofence

5
推荐指数
1
解决办法
765
查看次数

Android Oreo上的操作系统阻止了Geofence过渡PendingIntent

这只发生在Android Oreo上.我正在使用Play Services 11.4.2.我正在使用GeofencingClient注册地理围栏,并将带有pendingIntent的addGeofences方法注册到处理地理围栏过渡的IntentService.看起来播放服务发送的意图在某些条件下被操作系统阻止.

系统记录以下内容:

Background start not allowed: service Intent { cmp=my.app.id/my.package.struct.GeofenceTransIntentService (has extras) } to my.app.id/my.package.struct.GeofenceTransIntentService from pid=-1 uid=10154 pkg=my.app.id
Run Code Online (Sandbox Code Playgroud)

一旦我在以下情况下添加地理围栏:

  • 当我在设备启动后添加它
  • 当我在应用程序被刷卡后添加它时在两种情况下,应用程序实际上已经在后台运行(因为我能够运行添加地理围栏的代码)因为我听了PROVIDERS_CHANGED,BOOT_COMPLETED.

android google-play-services android-geofence google-location-services

2
推荐指数
1
解决办法
2815
查看次数