Android 调用原生API获取地理位置和经纬度,判断所在国家

public static boolean isCN(Context context) {TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);String countryIso = tm.getSimCountryIso();boolean isCN = false;//判断是不是大陆if (!TextUtils.isEmpty(countryIso)) {countryIso = countryIso.toUpperCase(Locale.US);if (countryIso.contains("CN")) {isCN = true;}}return isCN;}
/** 判断是否是国内的 SIM 卡,优先判断注册时的mcc */
public static boolean isChinaSimCard(Context c) {String mcc = getSimOperator(c);if (isOperatorEmpty(mcc)) {return false;} else {return mcc.startsWith("460");}
}

 

Locale locale = Locale.getDefault();
String country = locale.getCountry();

 CN   就是中国

1、添加位置权限

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>

2、activity实现获取经纬度,地理位置代码

public class MainActivity extends AppCompatActivity {private TextView textView;private static final String[] authBaseArr = {//申请类型Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.ACCESS_COARSE_LOCATION};private static final int authBaseRequestCode = 1;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);textView = findViewById(R.id.textView);LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);initNavi();//权限检查的代码if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {// TODO: Consider callingreturn;}locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,//指定GPS定位提供者1000,//指定数据更新的间隔时间1,//位置间隔的距离为1mnew LocationListener() {//监听GPS信息是否改变@Overridepublic void onLocationChanged(Location location) {//GPS信息发送改变时回调Log.i("lgq","onLocationChanged===="+location.getProvider());}@Overridepublic void onStatusChanged(String provider, int status, Bundle extras) {//GPS状态发送改变时回调}@Overridepublic void onProviderEnabled(String provider) { //定位提供者启动时回调}@Overridepublic void onProviderDisabled(String provider) { //定位提供者关闭时回调}});Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);//获取最新的定位信息locationUpdates(location);}private boolean hasBasePhoneAuth() {PackageManager pm = getPackageManager();for (String auth : authBaseArr) {if (pm.checkPermission(auth, getPackageName()) != PackageManager.PERMISSION_GRANTED) {return false;}}return true;}private void initNavi() {// 申请权限if (android.os.Build.VERSION.SDK_INT >= 23) {if (!hasBasePhoneAuth()) {this.requestPermissions(authBaseArr, authBaseRequestCode);return;}}}public void locationUpdates(Location location){if(location != null){StringBuilder stringBuilder = new StringBuilder(); //构建一个字符串构建器,用于记录定位信息stringBuilder.append("您的位置是:\n");stringBuilder.append("经度:");stringBuilder.append(location.getLongitude());stringBuilder.append("\n纬度:");stringBuilder.append(location.getLatitude());textView.setText(stringBuilder.toString());Log.i("lgq",".....经度==="+location.getLongitude()+"...纬度+====="+location.getLatitude());String ab = getAddress(location.getLatitude(),location.getLongitude());Log.i("lgq","sssssfa===="+ab);}else{textView.setText("GPS失效啦...");}}public String getAddress(double latitude, double longitude) {Geocoder geocoder = new Geocoder(this, Locale.getDefault());try {List<Address> addresses = geocoder.getFromLocation(latitude,longitude, 1);//            Address[addressLines=[0:"广东省东莞市健升大厦"],feature=健升大厦,admin=广东省,sub-admin=null,locality=东莞市,thoroughfare=null,postalCode=null,countryCode=CN,countryName=中国,hasLatitude=true,
//                    latitude=23.025354,hasLongitude=true,longitude=113.748738,phone=null,url=null,extras=Bundle[mParcelledData.dataSize=92]]if (addresses.size() > 0) {Address address = addresses.get(0);String data = address.toString();int startCity = data.indexOf("locality=") + "locality=".length();int endCity = data.indexOf(",", startCity);String city = data.substring(startCity, endCity);int startPlace = data.indexOf("feature=") + "feature=".length();int endplace = data.indexOf(",", startPlace);String place = data.substring(startPlace, endplace);return city + place ;}} catch (IOException e) {e.printStackTrace();}return "获取失败";}
}

如获取不到位置信息

加一判断即可

if (location==null){locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,//指定GPS定位提供者5000,//指定数据更新的间隔时间10,//位置间隔的距离为1mnew LocationListener() {//监听GPS信息是否改变@Overridepublic void onLocationChanged(Location location) {//GPS信息发送改变时回调Log.i("lgq","onLocationChanged===="+location.getProvider());}@Overridepublic void onStatusChanged(String provider, int status, Bundle extras) {//GPS状态发送改变时回调}@Overridepublic void onProviderEnabled(String provider) { //定位提供者启动时回调}@Overridepublic void onProviderDisabled(String provider) { //定位提供者关闭时回调}});location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);//获取最新的定位信息
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/414894.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3 View - 状态保持 session

1.状态保持 http协议是无状态的&#xff1a;每次请求都是一次新的请求&#xff0c;不会记得之前通信的状态客户端与服务器端的一次通信&#xff0c;就是一次会话实现状态保持的方式&#xff1a;在客户端或服务器端存储与会话有关的数据存储方式包括cookie、session&#xff0c;…

拖拽升空的Android小火箭

先上演示效果 1、MainActivity 主布局就两个Button按钮 &#xff1a;一开启、二关闭 就不贴主布局xml了 因为小火箭是游离在activity之外的&#xff0c;所以不能依赖activity的生命周期 需要注意的一点是不要忘记在清单文件里配置 service 贴一下代码&#xff1a; public class…

vue3 vite ts 报错ReferenceError: React is not defined

解决方案&#xff1a; 1、安装vitejs/plugin-vue-jsx pnpm install vitejs/plugin-vue-jsx2、配置vite.config.ts import vueJsx from vitejs/plugin-vue-jsxexport default defineConfig({plugins: [vue(),vueJsx() ] })

Android view转bitmap,byte[]转Bitmap

1、自定义marker布局文件即自定义view文件 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height&…

yii验证系统学习记录,基于yiicms(一)写的太长了,再写一篇(二)

项目地址&#xff1a;https://gitee.com/templi/yiicms 感谢七觞酒大神的付出&#xff0c;和免费分享。当然也感谢yii2的开发团队们。 项目已经安全完毕&#xff0c;不知道后台密码&#xff0c;这种背景下&#xff0c;后台无法进去。绕不开的话题就是&#xff1a; 1.后台密码账…

前端学习(2697):重读vue电商网站18之监听图片删除事件

Js // 处理图片移除的操作 handleRemove(file) {// 1.获取将要删除的图片的临时路径const filePath file.response.data.tmp_path// 2.从pics数组中&#xff0c;找到这个图片对应的索引值const idx this.addForm.pics.findIndex(x > x.pic filePath)// 3.调用数组的 spli…

vscode开发java接口跳转到实现

我是mac系统&#xff0c;按照默认是commandF12&#xff0c;但是我的mac 13寸&#xff0c;按照这个快捷键&#xff0c;就显示亮度调节了。所以需要使用插件IntelliJ IDEA Keybindings来解决这个问题。 快捷方式如下&#xff1a;

android学习路线:如何成长为高级工程师

转载地址&#xff1a;http://blog.csdn.net/singwhatiwanna/article/details/42343847 转载原因&#xff1a;博主说的挺好&#xff0c;前辈经验。高级也算是自己的一个长远目标吧&#xff0c;学习ing ##一 明确自我定位 现在你是初级工程师&#xff0c;但是你想当个高级工程师&…

前端学习(2698):重读vue电商网站19之处理图片预览操作

图片预览窗可以用 el-dialog 组件来做&#xff0c;然后通过 on-preview 函数来处理图片预览的操作。 Js <!-- 图片预览 --> <el-dialog title"图片预览" :visible.sync"previewVisable" width"50%"><img :src"previewPath&…

Android 集成高德地图——当前定位,添加图标,画路线,设置显示中心位置,比例,地图刷新位置监听,判断GPS开启,去打开GPS

/*** 判断定位服务是否开启** param* return true 表示开启*/ public static boolean isLocationEnabled(Context context) {int locationMode 0;String locationProviders;if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) {try {locationMode Settings.Secure.…

vscode-spring-boot YAML_UNKNOWN_PROPERTY 解决

使用vscode开发&#xff0c;安装了vscode-spring-boot ,报错如下 解决方案&#xff0c;增加对yml文件的识别 新增.vscode/settings.json 内容如下&#xff1a; {"files.associations": {"*.yml": "yaml"} }

adb命令检测apk启动时间、内存、CPU使用情况、流量、电池电量等——常用的adb命令...

ADB&#xff1a;Android Debug Bridge&#xff0c;是Android SDK里一个可以直接操作安卓模拟器或真实设备的工具&#xff0c;颇为强大。检测APP&#xff1a;adb shell am start -W packageName/.MainActivity //启动时间adb shell dumpsys meminfo $PID …

vue3父组件调用子组件方法

父组件 <component ref"xponent" /><script lang"ts" setup> import { ref } from "vue"; const xponent ref();const download async () > {console.log(xponent)xponent.value.download() } </script>子组件核心方法&…

Android之Junit测试类

今天跟着视频学习了Junit测试类&#xff0c;趁热打铁、顺便把学的东西整理下来&#xff0c;再就是为了以后好回顾 1、Junit单元测试介绍&#xff1a; 在实际开发中&#xff0c;经常要对已经实现的功能进行单元测试&#xff0c;以保证当前单元没问题&#xff0c;尽可能的减少已有…

前端学习(2699):重读vue电商网站20之使用Timeline 时间线

可视化地呈现时间流信息。 由于 vue-cli-plugin-element 最后更新时间是 2019年1月&#xff0c;而 element-ui 中 Timeline 时间线更新是在 3月份&#xff0c;因此我们没有办法直接进行引用。因此&#xff0c;我们直接通过手动导入的方式。 然后&#xff0c;我们打开 element.j…

Android 高德地图根据地址获取经纬度,计算两个坐标的距离

1、到高德开放平台申请&#xff0c;获取key 高德开放平台&#xff1a;https://lbs.amap.com/ 2、下载高德定位及地址搜索SDK:https://download.csdn.net/download/meixi_android/10845407 3、项目绑定高德SDK &#xff08;1&#xff09;配置key <meta-data android:name&q…

Graphics.DrawRectangle Method(矩形)

Overload List Name Description DrawRectangle(Pen, Int32, Int32, Int32, Int32) Draws a rectangle specified by a coordinate pair, a width, and a height. DrawRectangle(Pen, Rectangle) Draws a rectangle specified by a Rectangle structure. DrawRec…

前端学习(2700):重读vue电商网站21之如何导入全局样式表

直接在 main.js将相关样式导入即可 Code // 导入全局样式表 import ./assets/css/global.css

Android中WebService的应用

1.简介 Android中的WebService 是一种基于SOAP协议的远程调用标准。通过WebService可以将不同操作系统平台&#xff0c;不同语言、不同技术整合到一起。在Android SDK中并没有提供调用WebService的库&#xff0c;因此&#xff0c;需要使用第三方类库&#xff08;KSOAP2&#x…

宝塔 nginx 配置文件的存放目录配置vue的history模式

在项目中使用vue的history模式&#xff0c;需要配置文件&#xff0c;使用到宝塔面板的服务器。现在记录存放位置。 /www/server/panel/vhost/nginx配置history模式 try_files $uri $uri/ /index.html qkbim/index.html;配置跨域 add_header Access-Control-Allow-Origin *;ad…