上海千语创想科技有限公司
 175-2108-6175
网站建设资讯详细

Android原生方式如何获取经纬度和城市信息?

日期:2022-01-04  作者:千语创想  浏览:5062

 //2.获取位置提供器,GPS或是NetWork


List<String> providers = locationManager.getProviders(true);


if (providers.contains(LocationManager.GPS_PROVIDER)) {


//如果是GPS


locationProvider = LocationManager.GPS_PROVIDER;


Log.v(“TAG”, “定位方式GPS”);


} else if (providers.contains(LocationManager.NETWORK_PROVIDER)) {


//如果是Network


locationProvider = LocationManager.NETWORK_PROVIDER;


Log.v(“TAG”, “定位方式Network”);


}else {


Toast.makeText(this, “没有可用的位置提供器”, Toast.LENGTH_SHORT).show();


return;


}


if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {


//获取权限(如果没有开启权限,会弹出对话框,询问是否开启权限)


if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)


!= PackageManager.PERMISSION_GRANTED ||


ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)


!= PackageManager.PERMISSION_GRANTED) {


//请求权限


ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION,


Manifest.permission.ACCESS_COARSE_LOCATION}, LOCATION_CODE);


} else {


 //3.获取上次的位置,一般第一次运行,此值为null


Location location = locationManager.getLastKnownLocation(locationProvider);


if (location!=null){


Toast.makeText(this, location.getLongitude() + " " +


location.getLatitude() + “”,Toast.LENGTH_SHORT).show();


Log.v(“TAG”, “获取上次的位置-经纬度:”+location.getLongitude()+" "+location.getLatitude());


getAddress(location);


}else{


//监视地理位置变化,第二个和第三个参数分别为更新的最短时间minTime和最短距离minDistace


locationManager.requestLocationUpdates(locationProvider, 3000, 1,locationListener);


}


}


} else {


Location location = locationManager.getLastKnownLocation(locationProvider);


if (location!=null){


Toast.makeText(this, location.getLongitude() + " " +


location.getLatitude() + “”, Toast.LENGTH_SHORT).show();


Log.v(“TAG”, “获取上次的位置-经纬度:”+location.getLongitude()+" "+location.getLatitude());


getAddress(location);


}else{


//监视地理位置变化,第二个和第三个参数分别为更新的最短时间minTime和最短距离minDistace


locationManager.requestLocationUpdates(locationProvider, 3000, 1,locationListener);


}


}


}


public LocationListener locationListener = new LocationListener() {


// Provider的状态在可用、暂时不可用和无服务三个状态直接切换时触发此函数


@Override


public void onStatusChanged(String provider, int status, Bundle extras) {


}


// Provider被enable时触发此函数,比如GPS被打开


@Override


public void onProviderEnabled(String provider) {


}


// Provider被disable时触发此函数,比如GPS被关闭


@Override


public void onProviderDisabled(String provider) {


}


//当坐标改变时触发此函数,如果Provider传进相同的坐标,它就不会被触发


@Override


public void onLocationChanged(Location location) {


if (location != null) {


//如果位置发生变化,重新显示地理位置经纬度


Toast.makeText(TestLocationActivity.this, location.getLongitude() + " " +


location.getLatitude() + “”, Toast.LENGTH_SHORT).show();


Log.v(“TAG”, “监视地理位置变化-经纬度:”+location.getLongitude()+" "+location.getLatitude());


}


}


};


@Override


public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {


switch (requestCode) {


case LOCATION_CODE:


if(grantResults.length > 0 && grantResults[0] == getPackageManager().PERMISSION_GRANTED


&& grantResults[1] == PackageManager.PERMISSION_GRANTED) {


Toast.makeText(this, “申请权限”, Toast.LENGTH_LONG).show();


try {


List<String> providers = locationManager.getProviders(true);


if (providers.contains(LocationManager.NETWORK_PROVIDER)) {


//如果是Network


locationProvider = LocationManager.NETWORK_PROVIDER;


}else if (providers.contains(LocationManager.GPS_PROVIDER)) {


//如果是GPS


locationProvider = LocationManager.GPS_PROVIDER;


}


Location location = locationManager.getLastKnownLocation(locationProvider);


if (location!=null){


Toast.makeText(this, location.getLongitude() + " " +


location.getLatitude() + “”, Toast.LENGTH_SHORT).show();


Log.v(“TAG”, “获取上次的位置-经纬度:”+location.getLongitude()+" "+location.getLatitude());


}else{


// 监视地理位置变化,第二个和第三个参数分别为更新的最短时间minTime和最短距离minDistace


locationManager.requestLocationUpdates(locationProvider, 0, 0,locationListener);


}


}catch (SecurityException e){


e.printStackTrace();


}


} else {


Toast.makeText(this, “缺少权限”, Toast.LENGTH_LONG).show();


finish();


}


break;


}


}


//获取地址信息:城市、街道等信息


private List<Address> getAddress(Location location) {


List<Address> result = null;


try {


if (location != null) {


Geocoder gc = new Geocoder(this, Locale.getDefault());


result = gc.getFromLocation(location.getLatitude(),


location.getLongitude(), 1);


Toast.makeText(this, “获取地址信息:”+result.toString(), Toast.LENGTH_LONG).show();


Log.v(“TAG”, “获取地址信息:”+result.toString());


}


} catch (Exception e) {


e.printStackTrace();


}


return result;


}


@Override


protected void onDestroy() {


super.onDestroy();


locationManager.removeUpdates(locationListener);


}

-----------------------------------

转自51CTO博客,仅供参考。



转载请注明来自:https://www.qianyuthink.com/news/5724.html

填写您的项目需求给我们

或者直接拨打 7×12小时一对一咨询电话

175 2108 6175

请填写需求信息,我们会在10分钟内与您取得联系

请认真填写需求信息,我们会在10分钟内与您取得联系

×
客服二维码
咨询技术总监
175-2108-6175
客服二维码
技术总监微信
客服二维码