public class CustomViewActivity extends AppCompatActivity {       @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_test);    }    private static final String TAG = "CustomViewActivity";    private LocListener locListener = null;    /**     * 点击获取地图     *     * @param view     */    public void onClick(View view) {        if (null == locListener) {            locListener = new LocListener();        }        requestLatitudeAndLongtitude(getApplicationContext(), locListener);    }    /**     * 获取经纬度     *     * @param context     * @return     */    public static void requestLatitudeAndLongtitude(Context context, LocationListener locationListener) {        try {            final LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);            // 生成一个Criteria对象            Criteria criteria = new Criteria();            // 设置查询条件            criteria.setAccuracy(Criteria.ACCURACY_FINE); // 设置准确而非粗糙的精度            criteria.setPowerRequirement(Criteria.POWER_LOW); // 设置相对省电而非耗电,一般高耗电量会换来更精确的位置信息            criteria.setAltitudeRequired(false); // 不需要提供海拔信息            criteria.setSpeedRequired(false); // 不需要速度信息            criteria.setCostAllowed(false); // 不能产生费用            // 第一个参数,传递criteria对象            // 第二个参数,若为false,在所有Provider中寻找,不管该Provider是否处于可用状态,均使用该Provider。            // 若为true,则在所有可用的Provider中寻找。比如GPS处于禁用状态,则忽略GPS Provider。            // 1、可用中最好的            String locationProvider = locationManager.getBestProvider(criteria, true);            // 2、所有可用的中的第一个            if (locationProvider == null) {                List<String> providers = locationManager.getProviders(true);                if (providers != null && providers.size() > 0) {                    locationProvider = providers.get(0);                }            }            // 都不支持则直接返回            if (TextUtils.isEmpty(locationProvider)) {                return;            }            Location location = locationManager.getLastKnownLocation(locationProvider);            Log.i(TAG, "requestLatitudeAndLongtitude: location 1 =" + location);            if (location != null) {                //updateCacheLocation(context, location.getLatitude(), location.getLongitude());                locationListener.onLocationChanged(location);            } else {                locationManager.requestLocationUpdates(locationProvider, 1000 * 60 * 60, 1000, locationListener);            }        } catch (Exception e) {            // LogUtils.d("---location--- location : "+e.getMessage());        }    }    /**     * 获取位置后监听     */    private class LocListener implements LocationListener {        @Override        public void onLocationChanged(Location location) {            String locationAddress = getLocationAddress(location);            //TODO:当前地址为:locationAddress="北京市海淀区华奥饭店公司写字间中关村创业大街"        }        @Override        public void onStatusChanged(String provider, int status, Bundle extras) {        }        @Override        public void onProviderEnabled(String provider) {        }        @Override        public void onProviderDisabled(String provider) {        }    }    /**     * 将经纬度转换成中文地址     *     * @param location     * @return     */    private String getLocationAddress(Location location) {        String add = "";        Geocoder geoCoder = new Geocoder(getBaseContext(), Locale.CHINESE);        try {            List<Address> addresses = geoCoder.getFromLocation(                    location.getLatitude(), location.getLongitude(),                    1);            Address address = addresses.get(0);            Log.i(TAG, "getLocationAddress: " + address.toString());            // Address[addressLines=[0:"中国",1:"北京市海淀区",2:"华奥饭店公司写字间中关村创业大街"]latitude=39.980973,hasLongitude=true,longitude=116.301712]            int maxLine = address.getMaxAddressLineIndex();            if (maxLine >= 2) {                add = address.getAddressLine(1) + address.getAddressLine(2);            } else {                add = address.getAddressLine(1);            }        } catch (IOException e) {            add = "";            e.printStackTrace();        }        return add;    }}

记得清单文件 加上权限

        <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />        <uses-permission android:name="android.permission.INTERNET" />

更多相关文章

  1. Android中通过当前经纬度获得城市
  2. Android实时获得经纬度,发送给c++服务端
  3. Android获取经纬度的值并且显示
  4. Android根据经纬度获取位置信息
  5. android 通过wifi 获取经纬度和获取渠道号/屏幕宽高
  6. Android 高德地图点击地图获取经纬度
  7. Android原生方式获取经纬度和城市信息
  8. Android获取经纬度
  9. Android之根据经纬度查询位置地址名称

随机推荐

  1. Android之Volley框架使用优化--单例模式
  2. android之模仿QQ登陆的布局实现
  3. android菜鸟进阶之路——应用程序里嵌入
  4. 在系统里设置文件默认打开APP
  5. Android AppWidgetProvider 定时刷新问题
  6. Android实现发短信与打电话的功能
  7. Android android.support.v4.widget.Slid
  8. Android(安卓)Sqite数据库
  9. android 通过canvas旋转 绘制文字 竖直等
  10. android调用系统相机返回null的bug