为什么我没有拿到接近alterts即使我已经注册警报?(Why don't I get pr

2019-10-17 21:39发布

我想简单地为以后的区域的测试设定的接近,我只是已将此添加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控制台手动设置手机的坐标,我还没有看到日志消息。

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

我经历了一大堆在计算器上的帖子的阅读,但我一直没能解决这个问题。 我失去了我的代码片段的东西吗?

Answer 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将只与清单登记接收工作。



Answer 2:

确保你在正确的坐标输入。 在DDMS他们逆转,经度,再北纬



文章来源: Why don't I get proximity alterts even though I've registered alerts?