使用Android原生定位

最近不忙,研究一下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权限主要是网络定位需要

好像很简单的样子


猜你喜欢

转载自blog.csdn.net/qq_39191116/article/details/79536980