Android根据IP获取地理位置,精确到经纬度

摘要:每一个联网的设备都有一个IP地址,移动设备也不例外,如何定位Android手机当前的地理位置呢?很简单,我们依然可以利用 IP地址来获取Android手机的当前位置,可以精确到经纬度。

本文就直接以代码的方式演示如何根据IP地址查询地理经纬度坐标位置,下面的例子中演示的就是由58.192.32.1这个IP地址查询到其所在的经纬度坐标为(118.777802,32.061699)。

package eoe.demo;
import com.mapdigit.gis.DigitalMap;
import com.mapdigit.gis.MapPoint;
import com.mapdigit.gis.geometry.GeoLatLng;
import com.mapdigit.gis.service.IIpAddressGeocodingListener;
import com.mapdigit.gis.service.IpAddressLocation;
import com.pstreets.gisengine.R;
import com.pstreets.gisengine.SharedMapInstance;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
public class MapIpSearch extends Activity implements
IIpAddressGeocodingListener {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
@Override
public void onStart() {
super.onStart();
GeoLatLng center = new GeoLatLng(32.0616667, 118.7777778);
SharedMapInstance.map.setCenter(center, 15,
com.mapdigit.gis.raster.MapType.MICROSOFTCHINA);
SharedMapInstance.map.setIpAddressGeocodingListener(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.mapgeocoding_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.findaddress:
SharedMapInstance.map.getIpLocations(“58.192.32.1″);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
public void done(String query, IpAddressLocation result) {
if (result != null && result.error.length() == 0
&& result.longitude.length() > 0
&& result.longitude.length() > 0) {
try {
MapPoint mapPoint = new MapPoint();
String latLng = ”[" + result.longitude + "," + result.latitude+ ",0]“;
mapPoint.point = DigitalMap.fromStringToLatLng(latLng);
mapPoint.setName(result.organization);
mapPoint.setNote(result.city + ” ” + result.country);
SharedMapInstance.map.panTo(mapPoint.point);
catch (Exception e) {
result.error = ”IP_NOT_FOUND”;
}
}
}
@Override
public void readProgress(int bytes, int total) {
}
}

Android Studio 中,可以使用 Google Play Services 提供的 Location API 来获取经纬度。以下是获取用户当前位置经纬度的步骤: 1. 在 AndroidManifest.xml 文件中添加以下权限: ```xml <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> ``` 2. 在 build.gradle(Module:app) 文件中添加以下依赖: ```gradle implementation 'com.google.android.gms:play-services-location:18.0.0' ``` 3. 在代码中添加以下代码: ```java // 创建LocationManager对象 LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); // 判断是否有权限获取位置信息 if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { // 请求获取位置信息的权限 ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}, 1); return; } // 获取位置提供器名称,GPS或是NetWork Criteria criteria = new Criteria(); criteria.setAccuracy(Criteria.ACCURACY_FINE); // 高精度 criteria.setAltitudeRequired(false); // 不要求海拔 criteria.setBearingRequired(false); // 不要求方位 criteria.setCostAllowed(true); // 允许有花费 criteria.setPowerRequirement(Criteria.POWER_LOW); // 低功耗 String provider = locationManager.getBestProvider(criteria, true); // 获取LocationProvider // 获取位置信息 Location location = locationManager.getLastKnownLocation(provider); if (location != null) { double latitude = location.getLatitude(); // 获取纬度 double longitude = location.getLongitude(); // 获取经度 Log.d("TAG", "latitude: " + latitude); Log.d("TAG", "longitude: " + longitude); } ``` 注意:需要在 Android 手机上打开定位功能才能获取到位置信息。如果获取不到位置信息,可以尝试在设置中打开定位服务。同时,获取位置信息可能会比较耗时,建议在子线程中执行,避免阻塞主线程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值