我们如何在android中匹配两个字符串?
我试图将硬编码的纬度和经度与动态纬度和经度进行匹配,但它没有显示正确的输出,有人能帮我解决这个错误吗 我的代码是我们如何在android中匹配两个字符串?,android,gps,Android,Gps,我试图将硬编码的纬度和经度与动态纬度和经度进行匹配,但它没有显示正确的输出,有人能帮我解决这个错误吗 我的代码是 String Log = "-122.084095"; String Lat = "37.422005"; try { if ((Lat.equals(latitude)) && (Log.equals(longitude))) {
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();
}
它总是适用于其他部分…您的匹配是可以的,但您可能不应该检查像这样的gps位置
您应该将该位置转换为可以检查您是否在该位置10米半径范围内的位置。您不想在此处使用
字符串
比较,因为您无法保证实时位置的准确性
处理这一点的最佳方法是确定点之间的距离,然后确定它是否足够接近,以供你考虑,大致相同。
为此,我们使用distanceBetween
或distanceTo
文档是和
可以找到一些例子。以下是其中一个例子:
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);
更好的方法是将long/lat保留为double,然后比较数字
if(lat > HOME_LAT - 0.1 && lat < HOME_LAT + 0.1 && ...same for lon... ){}
if(lat>HOME\u lat-0.1&&lat
您可以将动态纬度和经度打印到Logcat,并使用硬编码纬度和经度进行检查纬度和经度是因点而异的变量,事实上,它们站在同一地点时会不断变化,因为它不精确
不要比较字符串,而是取lat和long的四舍五入值(long或float)并检查特定范围内的值。这将帮助你解决“家”和“办公室”的问题
例如:
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");
String Log=“22.084095”;
字符串Lat=“37.422005”;
双液化天然气=double.parseDouble(对数);
双lat=double.parseDouble(lat);
双upprLogHome=22.1;
双lwrLogHome=21.9;
双upprLatHome=37.5;
双lwrLatHome=37.3;
//双upprLogOfc=;
//双lwrLogOfc=;
//双upprLatOfc=;
//双lwrLatOfc=;
if(lnglwrLogHome和latlwrLatHome)
{
System.out.println(“你到家了”);
}
/*else if(lnglwrLogOfc和latlwrLatOfc)
{
System.out.println(“你到家了”);
}*/
其他的
System.out.println(“您既不在家也不在Ofc”);
但是对于负数lat long,您必须反转检查过程。试试这个
使用GoogleMapAPI传递lat和long值,您将获得格式化的地址。并且还传递动态lat和lng值,这与您将获得格式化地址的GoogleAPI相同。然后匹配两个格式化的地址,您将得到结果。我建议这样你可以试试
使用这个谷歌api Reena,非常简单,请查看下面的代码。您需要使用“equalsIgnoreCase()”而不是 “平等” if((纬度)和&(经度){ 应该有用 示例如下:
// 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));
}
}您确定字符串实际上相等吗?您测量的坐标很可能与您静态提供的坐标不完全相同。你需要计算两者之间的距离,并检查它是否在某个(可接受的)范围内。使用GPS,由于精度的原因,总是有可能出现误差。您可能应该将位置转换为数字,并将位置拟合与较小的错误量进行比较。是否可以在LogCat中打印这些纬度和经度,并比较这些字符串是否实际相等确保检查硬编码的纬度和经度是否等于动态纬度和经度。如何获得准确的lat和long值检查更新的答案。对于负lat-long,您必须编写单独的代码行。它的Logcat,而不是CatLog:)