android 定位

来源:互联网 发布:转格式软件哪个好 编辑:程序博客网 时间:2024/06/15 21:33

被要求不用三方写一个定位,显示当前定位坐标,所以用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);

这样就自己实现的定位了




                                             
0 0
原创粉丝点击