我们怎么能在android中匹配两个字符串?

时间:2013-02-22 09:59:41

标签: android gps

我尝试将经过硬编码的纬度经度与动态纬度和经度相匹配,但是它没有显示正确的输出,任何人都可以帮我解决这个错误

我的代码是

            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();
            }

它总是属于其他部分...

7 个答案:

答案 0 :(得分:3)

您不希望在此处使用String比较,因为您无法保证实时位置的准确度。

处理这个问题的最佳方法是确定点之间的距离,然后确定它是否足够接近你可以考虑,大致相同。

为此,我们使用distanceBetweendistanceTo

文档为herehere

可以找到示例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)); 
} 

}