Android笔记之使用LocationManager获取经纬度
LocationManager.getLastKnownLocation(String provider)有可能返回null,概率还挺高
findViewById(R.id.llMain).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AndPermission.with(MainActivity.this).runtime().permission(Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION)
.onGranted(new Action<List<String>>() {
@Override
public void onAction(List<String> data) {
boolean fineLocationPermissionGranted = PermissionChecker.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED;
boolean coarseLocationPermissionGranted = PermissionChecker.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED;
if (fineLocationPermissionGranted && coarseLocationPermissionGranted) {
LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
Location location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
if (location == null) {
new AlertDialog.Builder(MainActivity.this).setMessage("无法获取位置").show();
} else {
double longitude = location.getLongitude();
double latitude = location.getLatitude();
Log.d(TAG, longitude + ", " + latitude);
new AlertDialog.Builder(MainActivity.this).setMessage("经度:" + longitude + "\n纬度:" + latitude).show();
}
}
}
})
.onDenied(new Action<List<String>>() {
@Override
public void onAction(List<String> data) {
new AlertDialog.Builder(MainActivity.this).setMessage("位置权限被拒绝").show();
}
}).start();
}
});
以下是通过requestSingleUpdate获取经纬度,不过,LocationManager.requestSingleUpdate是异步的,获取到Location的时间不好控制,如果对经纬度的要求不是必须的,还是建议使用第一种
findViewById(R.id.btnGetLongitudeAndLatitude).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AndPermission.with(MainActivity.this).runtime().permission(Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION)
.onGranted(new Action<List<String>>() {
@Override
public void onAction(List<String> data) {
boolean fineLocationPermissionGranted = PermissionChecker.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED;
boolean coarseLocationPermissionGranted = PermissionChecker.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED;
if (fineLocationPermissionGranted && coarseLocationPermissionGranted) {
LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
locationManager.requestSingleUpdate(LocationManager.NETWORK_PROVIDER, new LocationListener() {
@Override
public void onLocationChanged(Location location) {
double longitude = location.getLongitude();
double latitude = location.getLatitude();
Log.d(TAG, longitude + ", " + latitude);
new AlertDialog.Builder(MainActivity.this).setMessage("经度:" + longitude + "\n纬度:" + latitude).show();
} @Override
public void onStatusChanged(String provider, int status, Bundle extras) { } @Override
public void onProviderEnabled(String provider) { } @Override
public void onProviderDisabled(String provider) { }
}, null);
} else {
new AlertDialog.Builder(MainActivity.this).setMessage("位置权限被拒绝").show();
}
}
})
.onDenied(new Action<List<String>>() {
@Override
public void onAction(List<String> data) {
new AlertDialog.Builder(MainActivity.this).setMessage("位置权限被拒绝").show();
}
}).start();
}
});
Android笔记之使用LocationManager获取经纬度的更多相关文章
- Android开发:LocationManager获取经纬度及定位过程(附demo)
在Android开发其中.常常须要用到定位功能,尤其是依赖于地理位置功能的应用.非常多人喜欢使用百度地图,高德地图提供的sdk.开放API,可是在只须要经纬度,或者城市,街道地址等信息.并不须要提供预 ...
- android之location 根据接口获取经纬度信息
http://maps.googleapis.com/maps/api/geocode/json?address=%E7%A6%8F%E5%BB%BA&sensor=falsehttp://m ...
- [置顶]
xamarin android使用gps定位获取经纬度
看了文章你会得出以下几个结论 1.android定位主要有四种方式GPS,Network(wifi定位.基站定位),AGPS定位 2.绝大部分android国产手机使用network进行定位是没有作用 ...
- Android Google Maps API 网络服务用于网络定位、计算路线、获取经纬度、获取详细地址等
extends:http://blog.csdn.net/h7870181/article/details/12505883 Google Maps API 网络服务 官网地址 : https://d ...
- iOS之获取经纬度并通过反向地理编码获取详细地址
_locationManager = [[CLLocationManager alloc] init]; //期望的经度 _locationManager.desiredAccuracy = kCLL ...
- Android笔记——Android中数据的存储方式(二)
我们在实际开发中,有的时候需要储存或者备份比较复杂的数据.这些数据的特点是,内容多.结构大,比如短信备份等.我们知道SharedPreferences和Files(文本文件)储存这种数据会非常的没有效 ...
- 转载]IOS LBS功能详解[0](获取经纬度)[1](获取当前地理位置文本 )
原文地址:IOS LBS功能详解[0](获取经纬度)[1](获取当前地理位置文本作者:佐佐木小次郎 因为最近项目上要用有关LBS的功能.于是我便做一下预研. 一般说来LBS功能一般分为两块:一块是地理 ...
- iOS获取经纬度
在ios8.0以上获取经纬度时,需要申请授权,否则不能定位 第一步: 在 HomeViewController.m @interfaceHomeViewController ()<CLLoc ...
- 获取经纬度之间两点间真实距离(适用于GoogleMap,BaiduMap,Amap等)
如何获取经纬度之间两点间真实距离(适用于GoogleMap,BaiduMap,Amap等) 目标:使用百度定位sdk开发实时移动距离计算功能,根据经纬度的定位,计算行驶公里数并实时刷新界面显示.大家 ...
随机推荐
- 13深入理解C指针之---内存管理
该系列文章源于<深入理解C指针>的阅读与理解,由于本人的见识和知识的欠缺可能有误,还望大家批评指教. 内存管理对所有程序都很重要,主要包括显式内存管理和隐式内存管理.其中隐式内存管理主要是 ...
- 子进程wait参数详解
os模块的简介参看 Python::OS 模块 -- 简介 os模块的文件相关操作参看 Python::OS 模块 -- 文件和目录操作 os模块的进程参数 Python::OS 模块 -- 进程参数 ...
- hdu 5459(递推好题)
Jesus Is Here Time Limit: 1500/1000 MS (Java/Others) Memory Limit: 65535/102400 K (Java/Others)To ...
- html-禁用右键、键盘F12、网页上选取内容、复制、粘贴
摘要 为了保护我们的代码,我们需要想些办法禁止复制. css: body{ -webkit-touch-callout: none; -webkit-user-select: none; ...
- Python语言 介绍
一.python介绍python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语 ...
- python3 - pop 接收邮件/ smtp 发送邮件
以下通过python3 实现接收和发送邮件,网上相关说明文档很多.请自己查阅,这里只写入代码, # 实例:通过poplib 模块接收指定账号的邮件并进行解码处理,结果可视化. #!/opt/pytho ...
- django删除表重建&修改用户密码&base64加密解密字符串&ps aux参数说明&各种Error例子
1.django的queryset不支持负索引 AssertionError: Negative indexing is not supported. 2.django向前端JavaScript传递列 ...
- Java并发编程实战 读书笔记(一)
最近在看多线程经典书籍Java并发变成实战,很多概念有疑惑,虽然工作中很少用到多线程,但觉得还是自己太弱了.加油.记一些随笔.下面简单介绍一下线程. 一 线程与进程 进程与线程的解释 个人觉 ...
- docker 如何清理垃圾呢
应用容器在宿主机上长期运行,应用实例启停容器,会产生大量的停止的容器,无容器使用的数据卷.网络配置,无容器依赖的镜像,这些垃圾日积月累,会影响到宿主机的运行状态,造成机子卡顿等现象.因此,需要对这些宿 ...
- linux下添加自动启动项,linux 开机自动启动脚本方法
#service servicename status是当前状态#chkconfig --list servicename是查看启动状态,也就是是否开机自动启动 首先写好脚本,如 mysql,把它放到 ...