GeoFence使用PendingIntent.getBroadcast()无法正常工作

时间:2018-06-12 14:53:49

标签: android broadcastreceiver android-8.0-oreo android-geofence android-8.1-oreo

我正在尝试向Geofence获取BroadcastReceiver触发器,BroadcastReceiver具有从意图中读取数据并对意图中发送的数据执行操作的代码。我的BroadCastReceiverGeoLocationBroadCastReceiver。当我的活动打开且应用程序处于后台时,我正在调用此代码。

public PendingIntent getPendingIntent(Context context){
   Intent i = new Intent(context, GeoLocationBroadCastReceiver.class);
   return PendingIntent.getBroadcast(context, 0, i, PendingIntent.FLAG_UPDATE_CURRENT);
}

PendingIntentGeofencingRequest.Builder一起传递给addGeofences方法(此数据在addGeoFence方法中返回)。

GeofencingClient client = LocationServices.getGeofencingClient(context);
 client.addGeofences(addGeoFence(100, lat, long, true), getPendingIntent(context))
                .addOnSuccessListener(new OnSuccessListener<Void>() {
                    @Override
                    public void onSuccess(Void aVoid) {
                        Log.e(TAG,"Added from location geofence");
                    }
                });

当我调用上面的代码时,地理围栏成功添加。

Manifest.xml文件中的接收者声明:

 <receiver
        android:name=".LocationMagic.GeoLocationBroadCastReceiver"
        android:enabled="true"
        android:exported="true"/>

问题:我没有收到广播而接收器没有被调用。我看到谷歌建议的方法是使用广播来克服服务的背景限制。我也知道广播限制(列入白名单并列入黑名单)。但根据谷歌codelabs,建议的方法是使用广播。 Google代码实验室链接here

来自google codelabs:

  

针对O的应用程序进一步受限于启动的服务   的背景。因此,针对O的应用不应使用   请求位置更新时PendingIntent.getService()。代替,   他们应该使用PendingIntent.getBroadcast()。

0 个答案:

没有答案