我正在尝试向Geofence
获取BroadcastReceiver
触发器,BroadcastReceiver
具有从意图中读取数据并对意图中发送的数据执行操作的代码。我的BroadCastReceiver
是GeoLocationBroadCastReceiver
。当我的活动打开且应用程序处于后台时,我正在调用此代码。
public PendingIntent getPendingIntent(Context context){
Intent i = new Intent(context, GeoLocationBroadCastReceiver.class);
return PendingIntent.getBroadcast(context, 0, i, PendingIntent.FLAG_UPDATE_CURRENT);
}
此PendingIntent
与GeofencingRequest.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()。