做网站开发钱,wordpress 分类目录使用英文,wordpress 当前页,wordpress 主循环调用文章目录 前言一、实现步骤二、使用步骤1.服务启动工具类2.实现LocationService 总结 前言
在android开发中地图和定位是很多软件不可或缺的内容#xff0c;这些特色功能也给人们带来了很多方便。定位一般分为三种发方案#xff1a;即GPS定位、Google网络定位以及基站定位。… 文章目录 前言一、实现步骤二、使用步骤1.服务启动工具类2.实现LocationService 总结 前言
在android开发中地图和定位是很多软件不可或缺的内容这些特色功能也给人们带来了很多方便。定位一般分为三种发方案即GPS定位、Google网络定位以及基站定位。 本文分别介绍GPS定位、以及基于Google的网络Wifi定位的详细步骤小米手机获取位置信息locationManager.getLastKnownLocation(provider)的Location一直为空查了资料换了种获取手机getProviders的方式就可以了
一、实现步骤
一般来说我们实现原生定位的流程大概是先判断有无权限》有权限启动一个LocationSrevice去获取定位》最后携带所需的定位信息返回进行开发。
二、使用步骤
1.服务启动工具类 代码如下示例大概步骤如下权限请求可自定义开发关键的是LocationService /*** 获取定位*/
public class MyLocationManager implements LocationService.LocationCallBack {private Activity context;private OnLocationListener onLocationListener;private String[] stringsLocation new String[]{Permission.ACCESS_FINE_LOCATION, Permission.ACCESS_COARSE_LOCATION};Overridepublic void Location_Return(double Location_latitude, double Location_longitude, String province, String city, String area, String featureName) {onLocationListener.OnLocation(Location_latitude, Location_longitude, province, city, area, featureName);}public interface OnLocationListener {void OnLocation(double Location_latitude, double Location_longitude, String province, String city, String area, String featureName);}public void setOnLocationListener(OnLocationListener onLocationListener) {this.onLocationListener onLocationListener;}public MyLocationManager(NonNull Activity context) {this.context context;if (!XXPermissions.isGranted(context, stringsLocation)) {MessageDialog codeDialog new MessageDialog(context, 位置信息权限使用说明, 为确保你能在******内使用位置信息************需要获取你的位置信息权限。允许后你可以随时通过手机系统设置对授权进行管理。, 取消, 去授权);codeDialog.setCancelable(false);codeDialog.show();codeDialog.setOnSumbitTextCodeListener(() - {doMainPermission();codeDialog.dismiss();});codeDialog.setOnCancelListener(() - {codeDialog.dismiss();});} else {initData();}}private void doMainPermission() {XXPermissions.with(context).permission(stringsLocation).request(new OnPermissionCallback() {Overridepublic void onGranted(NonNull ListString permissions, boolean allGranted) {if (allGranted) {initData();}}Overridepublic void onDenied(NonNull ListString permissions, boolean doNotAskAgain) {if (doNotAskAgain) {}}});}SuppressLint(MissingPermission)private void initData() {// 创建 Service 实例LocationService myService new LocationService();// 设置回调接口myService.setCallback(this);// 启动 Service 并执行操作Intent serviceIntent new Intent(context, LocationService.class);context.startService(serviceIntent);}
}
/**-------------------------/
不要忘了注册serviceandroid:name.utils.LocationServiceandroid:enabledtrueandroid:exportedfalse /
2.实现LocationService
代码如下示例
/*** 获取定位服务*/
public class LocationService extends Service {private LocationManager locationManager;private MyLocationListener myLocationListener;public static LocationCallBack mCallBack null;public interface LocationCallBack {void Location_Return(double Location_latitude, double Location_longitude, String province, String city, String area, String featureName);}public void setCallback(LocationCallBack callback) {this.mCallBack callback;}Overridepublic IBinder onBind(Intent intent) {return null;}SuppressLint(MissingPermission)Overridepublic void onCreate() {super.onCreate();myLocationListener new MyLocationListener();locationManager (LocationManager) getSystemService(Context.LOCATION_SERVICE);try {GPSLocation();} catch (Exception e) {if (ObjectUtils.isNotEmpty(locationManager) ObjectUtils.isNotEmpty(myLocationListener))locationManager.removeUpdates(myLocationListener); // 停止所有的定位服务stopSelf(); // 获取到经纬度以后停止该service}}class MyLocationListener implements LocationListener {// 位置改变时获取经纬度Overridepublic void onLocationChanged(Location location) {if (ObjectUtils.isNotEmpty(location)) {toGeocoder(location);}}// 状态改变时Overridepublic void onStatusChanged(String provider, int status, Bundle extras) {}// 提供者可以使用时Overridepublic void onProviderEnabled(String provider) {}// 提供者不可以使用时Overridepublic void onProviderDisabled(String provider) {}}SuppressLint(MissingPermission)private Location getLastKnownLocation(LocationManager locationManager) {ListString providers locationManager.getProviders(true);Location bestLocation null;for (String provider : providers) {Location l locationManager.getLastKnownLocation(provider);if (l null) {continue;}if (bestLocation null || l.getAccuracy() bestLocation.getAccuracy()) {bestLocation l;}}return bestLocation;}SuppressLint(MissingPermission)private void GPSLocation() {Location location getLastKnownLocation(locationManager);if (location ! null) {//不为空,显示地理位置经纬度String longitude Longitude: location.getLongitude();String latitude Latitude: location.getLatitude();LogUtils.e(Location: longitude latitude);toGeocoder(location);} else {LogUtils.e(Location: Location为空);if (ObjectUtils.isNotEmpty(locationManager) ObjectUtils.isNotEmpty(myLocationListener))locationManager.removeUpdates(myLocationListener); // 停止所有的定位服务stopSelf(); // 获取到经纬度以后停止该service}}SuppressLint(MissingPermission)private void toGeocoder(Location location) {String province ;String city ;String area ;String featureName ;try {Geocoder geocoder new Geocoder(getApplicationContext(), Locale.getDefault());ListAddress addresses geocoder.getFromLocation(location.getLatitude(), location.getLongitude(), 1);if (ObjectUtils.isNotEmpty(addresses) 0 addresses.size()) {Address address addresses.get(0);if (ObjectUtils.isNotEmpty(address)) {// 获取省份provinceprovince address.getAdminArea();// 获取城市Citycity address.getLocality();// 获取区县areaarea address.getSubLocality();// 获取详细地址featureName address.getFeatureName();// 获取街道地址String addressLine address.getAddressLine(0);// 打印详细地址信息LogUtils.e(AddressInfo, province: province);LogUtils.e(AddressInfo, City: city);LogUtils.e(AddressInfo, area: area);LogUtils.e(AddressInfo, FeatureName: featureName);LogUtils.e(AddressInfo, Address Line: addressLine);}mCallBack.Location_Return(location.getLatitude(), location.getLongitude(), province, city, area, featureName);}if (ObjectUtils.isNotEmpty(locationManager) ObjectUtils.isNotEmpty(myLocationListener))locationManager.removeUpdates(myLocationListener); // 停止所有的定位服务stopSelf(); // 获取到经纬度以后停止该service} catch (Exception e) {if (ObjectUtils.isNotEmpty(locationManager) ObjectUtils.isNotEmpty(myLocationListener))locationManager.removeUpdates(myLocationListener); // 停止所有的定位服务stopSelf(); // 获取到经纬度以后停止该servicee.printStackTrace();}}SuppressLint(MissingPermission)Overridepublic void onDestroy() {super.onDestroy();if (ObjectUtils.isNotEmpty(locationManager) ObjectUtils.isNotEmpty(myLocationListener))locationManager.removeUpdates(myLocationListener); // 停止所有的定位服务stopSelf();}}该处使用原生定位获取经纬度、省市县等数据的详细步骤。 总结
以上就是今天要讲的使用Android原生获取定位内容本文详细展现了完整流程希望对大家会有帮助公司如果有实力大可不必如此直接给第三方地图交钱就好了毕竟人家又快又准本文仅仅适用于只需经纬度或者地址信息的同学有地图展现需求的只能想别的方法了哈哈。