本文源码:[email protected]:sueleeyu/android-maps.git
android的定位功能有两种方式:
国内应用的话最好使用百度或高德sdk,较多室外场景或者数据精度要求不严的情况下可以使用原生方法。
参考Android接入google地图:https://blog.csdn.net/weixin_40239288/article/details/125169826
1. 在AndroidManifest.xml中添加权限:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
2.使用LocationManager获取信息。
LocationManager提供连接本地位置服务,这些本地位置允许应用程序获取定期更新设备的地理位置,或当设备进入一个特定的地理位置接近,触发一个特定意图,使用如下:
// 1需要检查权限,否则编译报错
if (Build.VERSION.SDK_INT >= 23 && ActivityCompat.checkSelfPermission(
this,
Manifest.permission.ACCESS_FINE_LOCATION
) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(
this,
Manifest.permission.ACCESS_COARSE_LOCATION
) != PackageManager.PERMISSION_GRANTED
) {
return
}
if (ActivityCompat.checkSelfPermission(
this,
Manifest.permission.ACCESS_FINE_LOCATION
) != PackageManager.PERMISSION_GRANTED
&& ActivityCompat.checkSelfPermission(
this,
Manifest.permission.ACCESS_COARSE_LOCATION
) != PackageManager.PERMISSION_GRANTED
) {
return
}
//2.获取位置管理器
locationManager = getSystemService(LOCATION_SERVICE) as LocationManager
//3.获取位置提供器,GPS或是NetWork
val providers = locationManager!!.getProviders(true)
if (providers.contains(LocationManager.GPS_PROVIDER)) {
//Provider是GPS
locationProvider = LocationManager.GPS_PROVIDER
Log.v("TAG", "定位方式GPS")
} else if (providers.contains(LocationManager.NETWORK_PROVIDER)) {
//Provider是Network
locationProvider = LocationManager.NETWORK_PROVIDER
Log.v("TAG", "定位方式Network")
} else {
//Provider无
Toast.makeText(this, "没有可用的位置提供器", Toast.LENGTH_SHORT).show()
return
}
//3.获取上次的位置,一般第一次运行,此值为null
val location = locationManager!!.getLastKnownLocation(
locationProvider!!
)
if (location != null) {
Toast.makeText(
this, location.longitude.toString() + " " +
location.latitude + "", Toast.LENGTH_SHORT
).show()
Log.v(
"TAG",
"获取上次的位置-经纬度:" + location.longitude + " " + location.latitude
)
tv_longitude?.setText("经度:"+location.longitude)
tv_latitude?.setText("纬度:"+location.latitude)
//getAddress(location)
} else {
//监视地理位置变化,第二个和第三个参数分别为更新的最短时间minTime和最短距离minDistace
//locationListener的onLocationChanged更新数据
locationManager!!.requestLocationUpdates(
locationProvider!!,
3000,
1f,
locationListener
)
}
3.获取地址信息: Geocoder反向地理编码的使用
//获取地址信息:城市、街道等信息
private fun getAddress(location: Location?): List<Address>? {
var result: List<Address>? = null
try {
if (location != null) {
//反向地理编码
val gc = Geocoder(this, Locale.getDefault())
result = gc.getFromLocation(
location.latitude,
location.longitude, 1
)
Toast.makeText(this, "获取地址信息:$result", Toast.LENGTH_LONG).show()
Log.v("TAG", "获取地址信息:$result")
}
} catch (e: Exception) {
e.printStackTrace()
}
return result
}
1.安装运行
1. java.io.IOException: grpc failed
原因为:the service is not available 服务不可用 即设备不支持Geocoder
1.https://www.jianshu.com/p/fb89ab396bf8
2.本项目示例源代码:
[email protected]:sueleeyu/android-maps.git
文章浏览阅读207次。I've been reading some Java socket code snippet and fonund out a fact that in socket communication, to send messages in sequence, you don't have to seperate them by hand, the writer/reader stream do t..._java socket writeutf
文章浏览阅读3.3k次,点赞2次,收藏7次。l 指定登录名称;基于口令认证时,使用强密码策略,比如:tr -dc A-Za-z0-9_ < /dev/urandom | head -c 12| xargs。服务端得到客户端的请求后,会到authorized_keys()中查找,如果有响应的IP和用户,就会随机生成一个字符串,例如:kgc。3)客户端得到服务端的信息后,通过算法生成密钥,结合自己的公钥生成密钥对,然后将密钥对发送给服务端。5)最后,客户端拥有自己的公钥和私钥以及服务端的公钥,服务端拥有自己的公钥和私钥以及客户端的公钥。_ssh登录命令
文章浏览阅读258次。C神奇操作(1)_static inline的优点
文章浏览阅读285次。成老师,深度人工智能教育创始人、资深人工智能讲师、高级人工智能算法工程师,四川省人工智能研究院AI人才培训中心前主讲老师,5年人工智能算法领域研发经验,4年人工智能教学经验,具备扎实的人工智能算法理论基础知识和丰富的项目实战经验,具有丰富的人工智能教学经验。曾老师,高级人工智能算法工程师、资深人工智能售前工程师,曾任国内一线互联网公司资深嵌入式工程师、AI独角兽企业——商汤科技公司客户交付工程师,曾从事工作包括嵌入式开发,AI算法研发,客户售前、售后技术支持等,具有精湛的售前售后技术,丰富的行业实战经验。_西安ai智造基地
文章浏览阅读1.6w次,点赞24次,收藏147次。5分钟快速了解BIOS,换硬盘装系统再不求人_preinstalled os license
文章浏览阅读4.2k次。前面的博文已经完成了panel与panelgroup的自定义增加,这篇博文将对Dashboard(一级菜单)的增加进行一个简单总结。增加Dashboard(一级菜单)增加Dashboard(一级菜单)首先进入/usr/share/openstack-dashbaord/openstack_dashboard/dashboards目录,会看到如下的目录结构:..._openstack图形界面怎么自定义
文章浏览阅读1.8k次。分卷压缩使用方法: int iMinLength = 100;//最小压缩包单位(100M) ZipHelper.Compress("../../../xxx.xx", "../../../xx.zip", ZipDataUnit.MB, iMinLength);//分卷压缩解压使用方法 : string strUnZipPath = Environment.CurrentDirectory + "\\DeCompress"; _ionic.zip
文章浏览阅读1.8k次。只留CUDA一个就够了。甚至我觉得,只要Develpment和Runtime两个就够了(不保正确,我没试过)_running build_ext
文章浏览阅读8.4k次,点赞5次,收藏2次。iOS 基于MVVM设计模式练习UITableView使用。_mvvm uitableview
文章浏览阅读447次,点赞10次,收藏9次。【代码】打印当前进程线程的名称和数量。
文章浏览阅读628次,点赞11次,收藏29次。在泰国举行的谷歌开发者论坛上,谷歌为我们介绍了一个名叫 Glide 的图片加载库,作者是bumptech。这个库被广泛的运用在google的开源项目中,包括2014年google I/O大会上发布的官方app。Picasso本身就是简单方便的图片加载框架,Glide是在Picasso的基础上进行改良的,更加好用。优点有:使用简单可配置度高,自适应程度高支持常见图片格式 Jpg png gif webp支持多种数据源 网络、本地、资源、Assets 等。_com.github.bumptech.glide的作用
文章浏览阅读21次。随着我国公路事业的发展,人工管理方式已经不能满足如今实际的需要。车牌识别技术是计算机视频图像识别技术在车辆牌照识别中的一种应用,是现代智能交通系统(Intelligent Traffic System,简称ITS)中的重要组成部分之一。车牌识别系统(vehicle license plate recognition system,简称LPR)使车辆管理更加智能化、数字化,有效提升了交通管理的效率。对于交通管理、治安处罚等工作的智能化起着十分重要的作用。它可广泛应用于交通流量检测,交通控制与诱导,机场、港