我尝试将经过硬编码的纬度经度与动态纬度和经度相匹配,但是它没有显示正确的输出,任何人都可以帮我解决这个错误
我的代码是
String Log = "-122.084095";
String Lat = "37.422005";
try {
if ((Lat.equals(latitude)) && (Log.equals(longitude))) {
AudioManager audiM = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
audiM.setRingerMode(AudioManager.RINGER_MODE_SILENT);
Toast.makeText(getApplicationContext(),
"You are at home",
Toast.LENGTH_LONG).show();
} else {
AudioManager auMa = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
auMa.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
Toast.makeText(getApplicationContext(),
"You are at office ", Toast.LENGTH_LONG)
.show();
}
} catch (Exception e) {
e.printStackTrace();
}
它总是属于其他部分...
答案 0 :(得分:3)
您不希望在此处使用String
比较,因为您无法保证实时位置的准确度。
处理这个问题的最佳方法是确定点之间的距离,然后确定它是否足够接近你可以考虑,大致相同。
为此,我们使用distanceBetween
或distanceTo
可以找到示例here。以下是其中一个例子:
Location locationA = new Location("point A");
locationA.setLatitude(pointA.getLatitudeE6() / 1E6);
locationA.setLongitude(pointA.getLongitudeE6() / 1E6);
Location locationB = new Location("point B");
locationB.setLatitude(pointB.getLatitudeE6() / 1E6);
locationB.setLongitude(pointB.getLongitudeE6() / 1E6);
double distance = locationA.distanceTo(locationB);
答案 1 :(得分:0)
您的匹配是可以的,但您可能不应该检查这样的GPS位置。
您应该将位置转换为可以检查您位于该位置半径10米范围内的位置。
答案 2 :(得分:0)
更好的方法是将long / lat留作双打并比较数字。
if(lat > HOME_LAT - 0.1 && lat < HOME_LAT + 0.1 && ...same for lon... ){}
答案 3 :(得分:0)
您可以将动态Latitute和经度打印到Logcat并使用硬编码的纬度和经度进行检查
答案 4 :(得分:0)
纬度和经度是各点之间不同的变量,事实上它们在站在同一点时不断变化,因为它不精确。
不是比较字符串,而是取一个舍入值的lat和long (long或float)和检查某个范围内的值< / strong>即可。这将帮助你解决“家庭”和“办公室”问题。
例如:
String Log = "22.084095";
String Lat = "37.422005";
double lng=Double.parseDouble(Log);
double lat=Double.parseDouble(Lat);
double upprLogHome=22.1;
double lwrLogHome=21.9;
double upprLatHome=37.5;
double lwrLatHome=37.3;
// double upprLogOfc=;
// double lwrLogOfc=;
// double upprLatOfc=;
// double lwrLatOfc=;
if(lng<upprLogHome && lng>lwrLogHome && lat<upprLatHome &&lat>lwrLatHome )
{
System.out.println("You are Home");
}
/* else if(lng<upprLogOfc && lng>lwrLogOfc && lat<upprLatOfc &&lat>lwrLatOfc )
{
System.out.println("You are Home");
}*/
else
System.out.println("You are neither Home nor Ofc");
但是对于负拉特长,你必须扭转检查过程。
答案 5 :(得分:0)
试试这个,
使用google map api传递lat和long值,您将获得格式化地址。并且还传递动态lat和lng值相同的谷歌api你会得到格式化的地址。然后匹配两个格式化的地址,你将得到结果。我建议这样你可以尝试这个
使用此谷歌API。 http://maps.googleapis.com/maps/api/geocode/json?latlng=11.029494,76.954422&sensor=true
答案 6 :(得分:0)
Reena,非常简单,请查看下面的代码。您需要使用“equalsIgnoreCase()”而不是 “等于”。
if((Lat.equalsIgnoreCase(latitude))&amp;&amp;(Log.equalsIgnoreCase(longitude))){
应该有效 示例如下:
// Demonstrate equals() and equalsIgnoreCase().
class equalsDemo {
public static void main(String args[]) {
String s1 = "Hello";
String s2 = "Hello";
String s3 = "Good-bye";
String s4 = "HELLO";
System.out.println(s1 + " equals " + s2 + " -> " +
s1.equals(s2));
System.out.println(s1 + " equals " + s3 + " -> " +
s1.equals(s3));
System.out.println(s1 + " equals " + s4 + " -> " +
s1.equals(s4));
System.out.println(s1 + " equalsIgnoreCase " + s4 + " -> " +
s1.equalsIgnoreCase(s4));
}
}