添加邻近警报不起作用

时间:2014-03-16 13:00:15

标签: android broadcastreceiver android-pendingintent locationmanager

我正在尝试使用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而你应该使用非常高的数字,但也没有运气。

有人知道问题是什么吗?

1 个答案:

答案 0 :(得分:0)

如果你阅读了Android官方文档(here),你会发现这句话&#34; 由于位置估算的近似性质,如果设备通过了简要给定区域,可能不会触发任何意图 &#34;

那是什么意思?这意味着当您在AVD上测试您的应用程序并且从DDMS向AVD发送gps坐标(纬度,经度)时,它很难模拟gps的真实方面,(因为首先你选择一些指向成为你的proximPoint,就在你之后,你选择远离proximPoint的anthor点,看看它是否正常工作),那不是它真正的设备。

因此解决方案是在真实设备上测试您的应用程序,或者使用DDMS尝试非常缓慢地更改坐标,直到您进入所需的区域。