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加载.swf flash文件
  3. Android中通过当前经纬度获得城市
  4. Android实时获得经纬度,发送给c++服务端
  5. Android获取经纬度的值并且显示
  6. Android根据经纬度获取位置信息
  7. 判断当前网络是否可用和调用系统设置wifi界面
  8. Android(安卓)创建,验证和删除桌面快捷方式 (删除快捷方式测试可
  9. Android(安卓)API 中文 (55) ―― ListAdapter

随机推荐

  1. EditText横屏时,弹出软件盘时不进行全屏
  2. Android(安卓)面试题集(2019-04-04总结)
  3. cocos2dx在Android下如何接入91SDK
  4. Android自动隐藏键盘
  5. Android(安卓)Gradle 学习 一
  6. Android输入法框架系统(下)
  7. Android(安卓)ClassLoader
  8. [Android] 关于系统工具栏和全屏沉浸模式
  9. 【Android(安卓)内存优化】Bitmap 长图加
  10. Android之VideoView 进行播放视频