android 定位

被要求不用三方写一个定位,显示当前定位坐标,所以用Android自带的定位写了一个,这里记录一下,大家一起学习学习


        
if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
            locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 500, 0, locationListener);
  			//gps定位慢,精度高,用GPS定位,getLastKnowLocation()方法90%获取到的都是null
			//最好从定位的监听里获取
            location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
 }else{ locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 500, 0, locationListener); location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); }


除了手动确定这两种定位方式,还可以让系统自动选择定位方式

Criteria criteria = new Criteria();
            criteria.setAccuracy(Criteria.ACCURACY_FINE);//设置定位经纬度精度
            criteria.setAltitudeRequired(false);//是否获得海拔信息
            criteria.setBearingAccuracy(Criteria.ACCURACY_FINE);//方向精度
            criteria.setBearingRequired(true);//是否获得方向
            criteria.setCostAllowed(true);//是否可以付费
            criteria.setSpeedAccuracy(Criteria.ACCURACY_FINE);//速度精度
            criteria.setSpeedRequired(true);//是否获取速度
//            criteria.setHorizontalAccuracy(Criteria.ACCURACY_HIGH);//水平方向的经纬度
//            criteria.setVerticalAccuracy(Criteria.ACCURACY_HIGH);//垂直距离的海拔高度
            criteria.setPowerRequirement(Criteria.POWER_LOW);//用电等级
            String provider = locationManager.getBestProvider(criteria, true);
            locationManager.requestLocationUpdates(500, 0, criteria, locationListener, Looper.myLooper());//.requestLocationUpdates(LocationManager.GPS_PROVIDER, 500, 0, locationListener);
            location = locationManager.getLastKnownLocation(provider);




定位的监听器是这个样子的

locationListener = new LocationListener() {

            // Provider的状态在可用、暂时不可用和无服务三个状态直接切换时触发此函数
            @Override
            public void onStatusChanged(String provider, int status, Bundle extras) {

            }

            // Provider被enable时触发此函数,比如GPS被打开
            @Override
            public void onProviderEnabled(String provider) {
                Toast.makeText(getApplicationContext(),provider + "被打开",Toast.LENGTH_LONG).show();
            }

            // Provider被disable时触发此函数,比如GPS被关闭
            @Override
            public void onProviderDisabled(String provider) {
                Toast.makeText(getApplicationContext(),provider + "被关闭",Toast.LENGTH_LONG).show();
            }

            //当坐标改变时触发此函数,如果Provider传进相同的坐标,它就不会被触发
            @Override
            public void onLocationChanged(final Location location) {
                setLocation(location);
            }
        };



记得在Manifest.xml文件里加上权限

<uses-permission android:name="android.permission.INTERNET" />
<!-- 这个权限用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<!-- 这个权限用于访问GPS定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

获取到定位以后,调用Geocoder获取定位信息

Geocoder gc = new Geocoder(getApplicationContext(), Locale.getDefault());
List<Address> fromLocation = gc.getFromLocation(lat, lon, 10);

这样就自己实现的定位了






                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值