赞
踩
最近不忙,研究一下Android原生的定位,定位个大概位置还是没问题的
主要的类有:
Criteria:设置定位的一些配置信息:海拔,导向什么的.
LocationManager:定位管理类,这个最主要的方法就是getBestProvider得到最适合的定位名称,getLastKnownLocation得到定位信息
Location:里面存放着定位的信息,经纬度,海拔等
Ceocoder:地区编码,通过getFromLocaion可以得到具体的地址
Address:里面存放地址信息,包括国家,省市,区等
了解这么多定位也就基本完成了,下面开始撸代码
Criteria c = new Criteria(); c.setPowerRequirement(Criteria.POWER_LOW);//设置耗电量为低耗电 c.setBearingAccuracy(Criteria.ACCURACY_COARSE);//设置精度标准为粗糙 c.setAltitudeRequired(false);//设置海拔不需要 c.setBearingRequired(false);//设置导向不需要 c.setAccuracy(Criteria.ACCURACY_LOW);//设置精度为低 c.setCostAllowed(false);//设置成本为不需要 //... Criteria 还有其他属性 LocationManager manager = (LocationManager) mContext.getSystemService(Context.LOCATION_SERVICE); String bestProvider = manager.getBestProvider(c, true); //得到定位信息 if (ActivityCompat.checkSelfPermission(mContext, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(mContext, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { return; } Location location = null; if (!TextUtils.isEmpty(bestProvider)) { location = manager.getLastKnownLocation(bestProvider); } if (null == location){ //如果没有最好的定位方案则手动配置 if (manager.isProviderEnabled(LocationManager.GPS_PROVIDER)){ location = manager.getLastKnownLocation(LocationManager.GPS_PROVIDER); }else if (manager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) { location = manager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); }else if (manager.isProviderEnabled(LocationManager.PASSIVE_PROVIDER)){ location = manager.getLastKnownLocation(LocationManager.GPS_PROVIDER); } } if (null == location){ Log.i(TAG, "获取定位失败!"); return; } //通过地理编码的到具体位置信息 Geocoder geocoder = new Geocoder(mContext, Locale.CHINESE); List<Address> addresses = geocoder.getFromLocation(location.getLatitude(), location.getLongitude(), 1); if (addresses.size()<=0){ Log.i(TAG, "获取地址失败!"); } Address address = addresses.get(0); String country = address.getCountryName();//得到国家 String locality = address.getLocality();//得到城市 //要获得哪些信息自己看咯
最后别忘了把权限加上,
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>internet权限主要是网络定位需要
好像很简单的样子
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。