1

我试图稍后为一个区域简单地设置一个接近度以进行测试,我只是将它添加到onCreate我的主要活动的方法中。

public void onCreate(Bundle bndBundle) {

    IntentFilter filter = new IntentFilter(WidgetService.ACTION_STOP_PROXIMITY); 
    registerReceiver(new ProximityIntentReceiver(), filter);

    LocationManager locManager = (LocationManager) this.getSystemService(LOCATION_SERVICE);
    Intent ittIntent = new Intent(this, ProximityIntentReceiver.class);
    ittIntent.putExtra(WidgetService.KEY_STOP_IDENTIFIER, 1000);
    PendingIntent pitIntent = PendingIntent.getBroadcast(this, 0, ittIntent, 0);
    locManager.addProximityAlert(60.15769, 24.94150, 150, -1, pitIntent);

    super.onCreate(bndBundle);
    getActionBar().setDisplayHomeAsUpEnabled(false);

}

..这是我正在使用的简单接收器类

public class ProximityIntentReceiver extends BroadcastReceiver {

    private static final int NOTIFICATION_ID = 1000;

    @Override
    public void onReceive(Context context, Intent intent) {

        String key = LocationManager.KEY_PROXIMITY_ENTERING;
        Boolean entering = intent.getBooleanExtra(key, false);

        if (entering) {
            Log.d(getClass().getSimpleName(), "entering");
        }
        else {
            Log.d(getClass().getSimpleName(), "exiting");
        }

    }

}

我正在我的模拟器上对此进行测试,当我使用 DDMS 控制台手动设置手机的坐标时,我仍然看不到日志消息。

我的清单文件没有任何特殊代码。我已经添加了正确的权限并拥有一个简单活动的代码——没有服务或任何东西。

我通读了一堆关于 StacKOverflow 的帖子,但我无法解决这个问题。我的片段中是否缺少某些内容?

4

2 回答 2

1

您正在通过 动态注册此接收器registerReceiver(),以使其响应动作字符串为 的广播WidgetService.ACTION_STOP_PROXIMITY

但是,您发送的实际广播正在尝试使用显式Intent标识您的接收器类。这与IntentFilter您使用的registerReceiver().

任何一个:

  • 在清单中注册您的接收器并摆脱registerReceiver(),在这种情况下您的显式Intent将起作用,或者

  • 使用new Intent(WidgetService.ACTION_STOP_PROXIMITY)代替new Intent(this, ProximityIntentReceiver.class),所以你的Intent行与你的IntentFilter

您不能使用显式Intent对象向通过 注册的接收者发送广播registerReceiver()。显式Intent只适用于清单注册的接收器。

于 2013-03-23T13:35:19.187 回答
0

确保输入正确的坐标。在 DDMS 中,它们是颠倒的,首先是经度,然后是纬度

于 2013-05-09T19:21:06.530 回答