2012-03-21 83 views
0

我试图在我的应用程序中添加一个接近警报,但可变半径。整数浮动,但addProximityAlert不起作用

如果我使用这样

float radius = 100f; 

它的工作原理半径值!

但我试图做这样说:

private void setProximityAlert(String Title, double lat, double lon, float radius, final int id, int requestCode){ 
    // Expiration is 10 Minutes (10mins * 60secs * 1000milliSecs) 
    long expiration = 600000; 

    LocationManager locManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 

    Intent intent = new Intent(PROXIMITY_INTENT_ACTION); 
    intent.putExtra("id", id); 
    intent.putExtra("Title", Title); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), requestCode, intent, PendingIntent.FLAG_CANCEL_CURRENT); 

    locManager.addProximityAlert(lat, lon, radius, expiration, pendingIntent); 
} 

我设置接近警报是这样的:

this.dh = new DataHelper(ShowMap.this); 
    List<Pontos> list = this.dh.selectAll(); 
    int count = 0; 
    for(Pontos p : list){ 
     markerPlaces.add(new OverlayItem(p.getName().toString(), Integer.toString(p.getId()), new GeoPoint(p.getLat(), p.getLng()))); 
     setProximityAlert(p.getName().toString(), p.getLat(), p.getLng(), p.getRadius(), p.getId(), count); 
     count++; 
    } 

注:p.getRadius()返回int值。 ..

我的问题是,我使用radius = 100f;它工作正常,所以我认为我需要转换为浮点相同的方式,如整数值是10,所以浮点数将是10f。

谢谢!

+0

这里真的不清楚发生了什么。你没有显示你的方法是什么样子的,或者参数,或者你如何调用它,或者你得到了什么错误。请阅读http://tinyurl.com/so-hints – 2012-03-21 11:10:15

+0

@JonSkeet感谢您的提示,我编辑了第一篇文章,希望您现在能够理解:) – silentw 2012-03-21 11:18:07

+0

不是真的 - 您得到的错误是什么? – 2012-03-21 11:19:33

回答

1

它应该是绝对好的。有一个从intfloat的隐式转换,所以如果p.getRadius()返回int,应该隐式转换为float - 这表明问题不在您认为的位置。

  • 如果它没有编译,你需要显示错误消息
  • 如果它的运行,而不是表现你期望的方式,你应该解释如何,你希望它不是表现。我强烈怀疑你没有得到你认为你有数据...

你曾说过,如果你使用它100F工作,但你实际数据为10。所以,也许问题是,接近警报是将距离估计为50?

+0

非常感谢您的回答,现在我更了解它,它正在工作! :) – silentw 2012-03-21 11:24:14

+0

@silentw:那你为什么接受显示不必要转换的答案? (通过一切手段不要接受我的,但接受一个不必要的东西似乎很奇怪,并且会让你的代码变得混乱。) – 2012-03-21 11:33:51

+0

它解决了我的问题,我发现GPS坐标不太靠近接近警报触发。但是,是的,你是对的,我不需要像上面提到的转换,它已经使用浮点半径(在函数的参数上)进行转换。谢谢! – silentw 2012-03-21 11:57:07

0

float floatValue = Float.parseFloat(radius +“”);

+0

这几乎是*从来不是一个好主意。不需要时不要使用文本转换。 – 2012-03-21 11:10:49

+0

也没有工作... – silentw 2012-03-21 11:12:10

+0

是的,但正如@silentw所说,以上都不适合他(奇怪),我提出了一些其他的想法。 – Rajkiran 2012-03-21 11:12:22

1

尝试没有铸造:

float r = radius; 

你不需要将int转换成明确的浮动。有一个从float到int的隐式转换。

+0

没有工作...:/ – silentw 2012-03-21 11:10:42

+0

如果它工作的时候你硬编码,那么上面的代码应该工作。否则打印日志,看看什么值传递的半径 – 2012-03-21 11:17:40

+0

我记录的值,它应该工作,如果整数值是10它正在打印10.0 ...但接近警报不起作用:/ – silentw 2012-03-21 11:20:19