我意识到这个问题已经存在,但我在实施解决方案时遇到了麻烦。
我正在使用这些问题作为指导:
multiple proximity alert based on a service
set 2 proximity alerts with the same broadcast
我在哪里注册接收者:
final String NEAR_YOU_INTENT = "neighborhood.crodgers.example.activities.PROXIMITY_ALERT";
IntentFilter filter = new IntentFilter(NEAR_YOU_INTENT);
registerReceiver(new LocationReceiver(), filter);
添加邻近警报的位置(注意:这是在服务中完成的,因此上下文抓取):
LocationManager manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
final String NEAR_YOU_INTENT = "neighborhood.crodgers.example.activities.PROXIMITY_ALERT";
Context context = getApplication().getApplicationContext();
int requestCode = 12345; //Spaceballs, anyone? anyone?
for (String domain : domainNames)
{
String[] itemNames = itemGetter();
for (String item : itemNames)
{
HashMap<String, String> attributes = getAttributesForItem(domain, item);
Intent intent = new Intent(NEAR_YOU_INTENT);
intent.putExtra(ADDRESS, attributes.get(ADDRESS));
intent.setAction(""+requestCode);
PendingIntent proximity = PendingIntent.getBroadcast(context, requestCode, intent, PendingIntent.FLAG_CANCEL_CURRENT);
manager.addProximityAlert(Double.parseDouble(attributes.get(LATITUDE)),
Double.parseDouble(attributes.get(LONGITUDE)),
6000f, -1, proximity);
requestCode++;
}
}
最初,我收到了添加的第一个近距离警报的通知(使用来自接收器的通知)。添加后
intent.setAction(""+requestCode);
我也尝试过:
intent.setData(""+ requestCode)
(我在其他几个地方看过这个推荐)我一直停止收到通知。
答案 0 :(得分:3)
问题是您使用setAction
Intent intent = new Intent(NEAR_YOU_INTENT);
intent.putExtra(ADDRESS, attributes.get(ADDRESS));
intent.setAction(""+requestCode); //HERE IS THE PROBLEM
你最后在最后一行中做的是将操作从NEAR_YOUR_INTENT更改为任何请求代码。 IE,你做的相当于
Intent intent = new Intent();
intent.setAction(NEAR_YOUR_INTENT);
intent.setAction(""+requestCode); // THIS OVERWRITES OLD ACTION
我怀疑你真正想做的是将requestCode添加为intent的额外内容,以便你可以在接收器中检索它。尝试使用
Intent intent = new Intent(NEAR_YOU_INTENT);
intent.putExtra(ADDRESS, attributes.get(ADDRESS));
intent.putExtra("RequestCode", requestCode);
或者,您可以将数据设置为您的请求代码。 IE,你可以使用
Intent intent = new Intent(NEAR_YOU_INTENT);
intent.putExtra(ADDRESS, attributes.get(ADDRESS));
intent.setData("code://" + requestCode);
然后你需要更改你的接收器,以便它可以接受“code://” 架构。要做到这一点:
final String NEAR_YOU_INTENT = "neighborhood.crodgers.example.activities.PROXIMITY_ALERT";
IntentFilter filter = new IntentFilter(NEAR_YOU_INTENT);
filter.addDataScheme("code");
registerReceiver(new LocationReceiver(), filter);
然后你可能会在获得意图时使用某种方法从数据字段中解析出id。 IMO,额外的方法更容易。