我在接收位置更新时触发BoradcastReceiver
PendingIntent pendingIntent = PendingIntent
.getBroadcast(this, 54321, intent, PendingIntent.FLAG_CANCEL_CURRENT);
LocationServices.FusedLocationApi.requestLocationUpdates(this.mGoogleApiClient,
mLocationRequest, pendingIntent);
和我的收件人
public static class LocationReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
boolean hasLocation = LocationResult.hasResult(intent);
}
}
如果我运行上面的代码eveything工作正常hasLocation总是正确,完美。
但是如果我希望将一些变量传递给Receiver,那么我会这样做:
Intent intent = ..
intent.putExtra("test", "hello");
PendingIntent pendingIntent = PendingIntent
.getBroadcast(this, 54321, intent, PendingIntent.FLAG_CANCEL_CURRENT);
现在位于接收者LocationResult.hasResult(意图);总是假的
这是一个错误吗?这有解决方法吗?如何将变量传递给接收器?
答案 0 :(得分:1)
我在谷歌搜索时发现了你的问题。我将分享我的解决方案,以防其他人发现像我这样的问题。
首先,这是我的情况,与您的情况类似:
requestLocationUpdates()将位置数据存储在intent的mExtras字段中。出于某种原因,如果我使用Intent.putExtra()向Intent添加另一个Extra,则不会添加位置数据。所以onHandleIntent()被调用,但意图是缺少位置数据。如果我没有添加任何额外内容,那么位置数据就会通过,一切都很好。
我的解决方法:
我使用了Intent.addCategory()和getCategory()来执行与putExtra(“myExtraName”,String)完全相同的操作。如果要传递其他数据类型,请将它们转换为字符串,然后在onHandleIntent()中解析它们。
我的环境:
我正在使用Play服务版本11.0.4和FusedLocationProviderClient,因为最近已弃用FusedLocationProviderApi。 FusedLocationProviderClient.requestLocationUpdates()文档似乎没有解决这个问题。