首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >邻近警报未触发

邻近警报未触发
EN

Stack Overflow用户
提问于 2018-04-25 10:49:56
回答 1查看 134关注 0票数 0

在我的Android应用程序上运行Emulator时,我遇到了一些问题,无法让我的接近警报工作。基本上,接近警报应该启动一个活动,该活动将(暂时)打印到日志中,但是,当为警报设置了所需的位置,并且仿真器的位置设置在该特定位置时,什么也不会发生。以下是接近警报的代码:

代码语言:javascript
复制
LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Intent intent = new Intent(MY_PROXIMITY_ALERT);
PendingIntent proxIntent = PendingIntent.getActivity(MapActivity.this, 0, intent, 0);

lm.addProximityAlert(latlng.latitude, latlng.longitude, 100, -1, proxIntent);

现在在清单中声明了MY_PROXIMITY_ALERT,如下所述:

代码语言:javascript
复制
<receiver android:name=".myLocationReceiver">
   <intent-filter>
       <action android:name="PROXIMITY_ALERT"/>
   </intent-filter>
</receiver>

下面是我的myLocationReceiver代码

代码语言:javascript
复制
public class myLocationReceiver extends BroadcastReceiver{

private static final String TAG = "myLocationReceiver";

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

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

    if(entering) {
        Log.d(TAG, "onReceive: Entering proximity of location");
    }

}

}

我相信我的问题与Intent或PendingIntent对象有关,但我不能完全确定。我还听说GPS通常需要大约一分钟的时间才能真正注册到附近,但即使过了一段时间,我仍然没有收到日志消息。

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2018-04-25 21:20:38

您已经使用操作MY_PROXIMITY_ALERT创建了一个Intent,然后使用PendingIntent.getActivity()获取了一个要传递给LocationManagerPendingIntent。当满足接近条件时,LocationManager将尝试启动正在侦听操作MY_PROXIMITY_ALERTActivity

代码语言:javascript
复制
Intent intent = new Intent(MY_PROXIMITY_ALERT);
PendingIntent proxIntent = PendingIntent.getActivity(MapActivity.this, 0, intent, 0);

在清单中,您已经声明了一个侦听操作MY_PROXIMITY_ALERTBroadcastReceiver。这行不通的。

由于您希望邻近警报触发BroadcastReceiver,因此需要像这样获取PendingIntent

代码语言:javascript
复制
Intent intent = new Intent(MY_PROXIMITY_ALERT);
PendingIntent proxIntent = PendingIntent.getBroadcast(MapActivity.this, 0, intent, 0);

就我个人而言,我认为使用“显式”Intent而不是“隐式”Intent会更好。在这种情况下,您可以这样做:

代码语言:javascript
复制
Intent intent = new Intent(MapActivity.this, myLocationReceiver.class);
PendingIntent proxIntent = PendingIntent.getBroadcast(MapActivity.this, 0, intent, 0);

您不需要在Intent中使用该操作。

使用一个“显式的”Intent告诉Android确切地启动哪个组件(类)。如果你使用“隐式”Intent,安卓必须搜索那些宣称它们可以处理某些操作的组件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50013340

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档