android提供LoacationManager类来获取自己的经纬度。也可以通过反向地理编码发送http给google返回一个确定值给自己再在解析显示到textview上(Geocoding API)。
首先需要申明权限 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.INTERNET" /> FINE权限对应的是GPS功能权限, COARSE对应的是NETWORK权限, Internet对应的是联网权限。
public class MainActivity extends AppCompatActivity { @Bind(R.id.one_text) TextView oneText; private LocationManager locationManager; private String provider; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); //这里传入true表示启用的位置提供器都得到返回 List<String> providerList = locationManager.getProviders(true); if (providerList.contains(LocationManager.GPS_PROVIDER)) { provider = LocationManager.GPS_PROVIDER; } else if (providerList.contains(LocationManager.NETWORK_PROVIDER)) { provider = LocationManager.NETWORK_PROVIDER; } else { Toast.makeText(this, "没有打开任何位置提供器", Toast.LENGTH_SHORT).show(); return; } /** //如果直接拿GPS定位,这个Location很有肯能为Null.而出现空指针 //可能是BUG,GPS在室内,会为location或者很难找到 //而是用network则不会出现这个情况 */ Location location = locationManager.getLastKnownLocation(provider); if (location != null) { /** * 这个lacation是空的 * Toast也不会弹出来,说明程序不运行进来,location是空的 */ Toast.makeText(this, "dadadaadadaadaddadadadada", Toast.LENGTH_SHORT).show(); showLocation(location); } //这个if也是要你检查权限,不加也能运行,但会红线提示而已 if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { return; } /** * 四个参数,第一个是GPS/NETWORK,第二个是刷新时间(毫秒),第三个是刷新距离(米),第四个是接口实例 */ locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 3000, 0, locationListener); //调用GPS locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 3000, 0, locationListener);//调用NETWORK } private void showLocation(Location location) { String myLocation = "经度:" + location.getLatitude() + "\n" + "纬度:" + location.getLongitude(); Toast.makeText(this, "" + myLocation, Toast.LENGTH_SHORT).show(); oneText.setText(myLocation); } LocationListener locationListener = new LocationListener() { /** * 移动距离超过,调用此方法 * @param location */ @Override public void onLocationChanged(Location location) { showLocation(location); } @Override public void onStatusChanged(String s, int i, Bundle bundle) { } @Override public void onProviderEnabled(String s) { } @Override public void onProviderDisabled(String s) { } }; @Override protected void onDestroy() { super.onDestroy(); if (locationManager != null) { //这个if也是要你检查权限,不加也能运行,但会红线提示而已 if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { return; } locationManager.removeUpdates(locationListener); } } }