我正在尝试使用addProximityAlert。我已经按照本网站http://myandroidtuts.blogspot.dk/2012/10/proximity-alerts.html的教程进行了操作。 我也尝试了其他教程,但我也无法让它们工作。
这是我创建接近警报的代码:
double lat = 55.659890;
double longi = 12.591188;
float radius = 3000;
lm = (LocationManager)
getSystemService(Context.LOCATION_SERVICE);
Intent intent = new Intent("dk.itu.percom.tourguide.android.ProximityAlert");
long expire = -1;
proximityIntent = PendingIntent.getBroadcast(getApplicationContext(), -1, intent, 0);
lm.addProximityAlert(lat, longi, radius, expire, proximityIntent);
这是我的接收者:
public class ProximityIntentReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
String k=LocationManager.KEY_PROXIMITY_ENTERING;
boolean state=intent.getBooleanExtra(k, false);
if(state){
Toast.makeText(context, "Welcome to my Area", Toast.LENGTH_LONG).show();
}else{
Toast.makeText(context, "Thank you for visiting my Area,come back again!!",Toast.LENGTH_LONG).show();
}
}
}
我的清单:
<receiver android:name="ProximityIntentReceiver"
android:exported="false" >
<intent-filter>
<action android:name="dk.itu.percom.tourguide.android.ProximityAlert" />
</intent-filter>
</receiver>
我添加了权限
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
我还试图用
添加接收器IntentFilter filter = new IntentFilter("dk.itu.percom.tourguide.android.ProximityAlert");
registerReceiver(new ProximityIntentReceiver(), filter);
但这也不起作用。某处我还读到使用-1表示到期时不适用于4.3而你应该使用非常高的数字,但也没有运气。
有人知道问题是什么吗?
答案 0 :(得分:0)
如果你阅读了Android官方文档(here),你会发现这句话&#34; 由于位置估算的近似性质,如果设备通过了简要给定区域,可能不会触发任何意图 &#34;
那是什么意思?这意味着当您在AVD上测试您的应用程序并且从DDMS向AVD发送gps坐标(纬度,经度)时,它很难模拟gps的真实方面,(因为首先你选择一些指向成为你的proximPoint,就在你之后,你选择远离proximPoint的anthor点,看看它是否正常工作),那不是它真正的设备。因此解决方案是在真实设备上测试您的应用程序,或者使用DDMS尝试非常缓慢地更改坐标,直到您进入所需的区域。