Android 手机app三种方法获取定位地址(自带API,外接SDK,获取外网IP)
1.1步骤:
a.清单文件中配置权限:
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><!--危险--><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
b.定位util(从stackoverflow扒来的~顺带改了下)
package co.chexiao.itwarehouse.util;import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;import java.util.Timer;
import java.util.TimerTask;import co.chexiao.itwarehouse.app.App;/*** Author: xx* Time:2018/4/23 19:37.* Description:stackoverflower上的定位*/public class MyLocation {Timer timer1;LocationManager lm;LocationResult locationResult;boolean gps_enabled = false;boolean network_enabled = false;boolean passive_enabled = false;public boolean getLocation(Context context, LocationResult result) {// I use LocationResult callback class to pass location value from MyLocation to user code.locationResult = result;if (lm == null)lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);//是否可用try {gps_enabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);} catch (Exception ex) {}try {network_enabled = lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER);} catch (Exception ex) {}try {passive_enabled = lm.isProviderEnabled(LocationManager.PASSIVE_PROVIDER);} catch (Exception ex) {}//如果gps和网络还有wifi不行就不开监听if (!gps_enabled && !network_enabled&& !passive_enabled)return false;//压制警告if (ActivityCompat.checkSelfPermission(App.getInstance(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED&& ActivityCompat.checkSelfPermission(App.getInstance(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {return true;}if (gps_enabled)lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListenerGps);if(network_enabled)lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListenerNetwork);if(passive_enabled)lm.requestLocationUpdates(LocationManager.PASSIVE_PROVIDER, 0, 0, locationListenerpassive);timer1=new Timer();timer1.schedule(new GetLastLocation(), 20000);return true;}//关闭定位public void cancelTimer() {timer1.cancel();lm.removeUpdates(locationListenerGps);lm.removeUpdates(locationListenerNetwork);lm.removeUpdates(locationListenerpassive);}LocationListener locationListenerGps = new LocationListener() {public void onLocationChanged(Location location) {timer1.cancel();locationResult.gotLocation(location);lm.removeUpdates(this);lm.removeUpdates(locationListenerNetwork);lm.removeUpdates(locationListenerpassive);}public void onProviderDisabled(String provider) {}public void onProviderEnabled(String provider) {}public void onStatusChanged(String provider, int status, Bundle extras) {}};LocationListener locationListenerNetwork = new LocationListener() {public void onLocationChanged(Location location) {timer1.cancel();locationResult.gotLocation(location);lm.removeUpdates(this);lm.removeUpdates(locationListenerGps);lm.removeUpdates(locationListenerpassive);}public void onProviderDisabled(String provider) {}public void onProviderEnabled(String provider) {}public void onStatusChanged(String provider, int status, Bundle extras) {}};LocationListener locationListenerpassive = new LocationListener() {public void onLocationChanged(Location location) {timer1.cancel();locationResult.gotLocation(location);lm.removeUpdates(this);lm.removeUpdates(locationListenerGps);lm.removeUpdates(locationListenerNetwork);}public void onProviderDisabled(String provider) {}public void onProviderEnabled(String provider) {}public void onStatusChanged(String provider, int status, Bundle extras) {}};class GetLastLocation extends TimerTask {@Overridepublic void run() {lm.removeUpdates(locationListenerGps);lm.removeUpdates(locationListenerNetwork);lm.removeUpdates(locationListenerpassive);Location net_loc=null, gps_loc=null,passive_loc=null;//压制警告if (ActivityCompat.checkSelfPermission(App.getInstance(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED&& ActivityCompat.checkSelfPermission(App.getInstance(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {return;}if(gps_enabled)gps_loc=lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);if(network_enabled)net_loc=lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);if(passive_enabled)passive_loc=lm.getLastKnownLocation(LocationManager.PASSIVE_PROVIDER);//使用最近的一条if(gps_loc!=null && net_loc!=null&&passive_loc!=null){if(gps_loc.getTime()>net_loc.getTime()&&gps_loc.getTime()>passive_loc.getTime()){locationResult.gotLocation(gps_loc);} else if (net_loc.getTime()>gps_loc.getTime()&&net_loc.getTime()>passive_loc.getTime()){locationResult.gotLocation(net_loc);}else {locationResult.gotLocation(passive_loc);}return;}if(gps_loc!=null){locationResult.gotLocation(gps_loc);return;}if(net_loc!=null){locationResult.gotLocation(net_loc);return;}if(passive_loc!=null){locationResult.gotLocation(passive_loc);return;}locationResult.gotLocation(null);}}public static abstract class LocationResult{public abstract void gotLocation(Location location);}
}
private void requirePermission() {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED&& ActivityCompat.checkSelfPermission(MyApplication.getInstance(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION,Manifest.permission.ACCESS_FINE_LOCATION},MY_PERMISSIONS_REQUEST_CALL_PHONE);}else{MyLocation.LocationResult locationResult = new MyLocation.LocationResult(){@Overridepublic void gotLocation(Location location){setLocation(location);}};MyLocation myLocation = new MyLocation();myLocation.getLocation(MainActivity.this, locationResult);}}}@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {if (requestCode == MY_PERMISSIONS_REQUEST_CALL_PHONE){for (int i = 0; i < grantResults.length; i++) {if (grantResults[i] != PackageManager.PERMISSION_GRANTED) {//判断是否勾选禁止后不再询问boolean showRequestPermission = ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, permissions[i]);if (showRequestPermission) {MyToast.showToast("权限未申请");}}else {MyLocation.LocationResult locationResult = new MyLocation.LocationResult(){@Overridepublic void gotLocation(Location location){setLocation(location);}};MyLocation myLocation = new MyLocation();myLocation.getLocation(MainActivity.this, locationResult);}}}super.onRequestPermissionsResult(requestCode, permissions, grantResults);}
d.将经纬度查询到地址
private void setLocation(Location location) {if (location!=null) {String mfeatureName = null;Geocoder geocoder = new Geocoder(MainActivity.this);List<Address> addList = null;// 解析经纬度try {addList = geocoder.getFromLocation(location.getLatitude(), location.getLongitude(), 1);} catch (IOException e) {e.printStackTrace();}if (addList != null && addList.size() > 0) {for (int i = 0; i < addList.size(); i++) {Address add = addList.get(i);mfeatureName = add.getFeatureName();tvLocaiton.setText(mfeatureName);}}}}
e.关闭定时器
myLocation.cancelTimer();
2、外接sdk
CMYIP
public static String getOuterNetFormCmyIP(String response) {Pattern pattern = Pattern .compile("((?:(?:25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d)))\\.){3}(?:25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d))))");Matcher matcher = pattern.matcher(response.toString());if (matcher.find()) {String group = matcher.group(); return group;}return null;
}
或者直接请求这个接口获取到IP
百度API
二、说点啥
以上的三种方法都是我瞎编的...哈哈哈
Android 手机app三种方法获取定位地址(自带API,外接SDK,获取外网IP)相关推荐
- Chrome模拟手机浏览器(iOS/Android)的三种方法,亲测无误!
各大网站都有推出自己的手机访问版本页面,不管是新闻类还是视频网站,我们在电脑是无法直接访问到手机网站的,比如我经常访问一个3g.qq.com这个手机站点,如果在电脑上直接打开它,则会跳转到其它页面,一 ...
- Framework事件机制—Android事件处理的三种方法
1.1.背景 Android的事件处理的三种方法: 1.基于监听的事件处理机制 setOnClickListener,setOnLongClickListener.setOnTouchListener ...
- 【Android开发】三种方法实现Button点击事件响应
目录 1.在xml中对onclick()进行指定方法 2.NEW一个OnClickListenner()接口实现 3.实现OnClickListener接口(Switch方法) Hello,你好呀,我 ...
- 不同品牌android手机ui,三种不同界面的安卓系统_华为手机_手机Android频道-中关村在线...
虽然三款产品均搭载的是谷歌Android智能系统,但同时也都植入了各家自己研发的操作界面,红米Note是MIUI V5,酷派大神F1是CoolLife UI,华为荣耀畅玩版是Emotion UI,这三 ...
- 在不丢失数据的情况下解锁锁定的 Android 手机的 4 种方法
尽管您可以使用指纹解锁手机,但大多数智能手机都需要 PIN 码.图案或字母数字代码作为主密码.如果您有一段时间没有输入手机密码,很容易忘记.正是由于这个原因,即使您打开了指纹解锁,大多数智能手机也会让 ...
- abd连接手机的三种方法
mark地址:https://www.cnblogs.com/zhuminghui/p/10457674.html
- 服务器win10系统开机慢,三种方法教你解决Win10系统开机慢,爱纯净官网
Win10系统开机慢该如何解决?在Win8系统出现以后的Windows系统中,都有一个特点,那就是快速启动,Win10系统升级更新后,比之前的系统更有一些不便之处,尤其是在Win10系统的开机方面,都 ...
- flask中 app.run(host='0.0.0.0', port=5000, debug=False) 不能用外网ip访问的解决办法
pycharm 2018开启debug模式和修改host: 在Pycharm 2018中,如果想要开启debug模式和更改端口号,则需要编辑项目配置.直接在app.run中更改是无效的.示例图如下: ...
- java获取系统CPU和内存使用率的三种方法
获取系统CPU和内存的三种方法: 1.使用OperatingSystemMXBean获取 2.使用sigar方法获取 3.使用oshi方法获取 以下是我在我的机子上对三种方法测试的比较 方法 准确率 ...
最新文章
- python函数基础和装饰器
- 错误类型3错误:活动类{}不存在
- 解决Teamviewer连接出现的黑屏问题
- 基于FPGA的图像处理(一)--System Generator介绍
- a4988 脉宽要求_A4982/A4984/A4985和A4988设备主要针对办公室自动化市场
- jq往字符串中插入_jq: dom-插入
- 迁移潮来袭!数十个项目宣布即将停止支持 Python 2
- mysql数据库学习——5,数据类型,字符集和校对
- 软件推荐:论文翻译阅读 + 文献管理 + markdown笔记 + 多设备同步 + 一键导出bib参考文献
- Linux安装GIMP
- 上网账号口令怎么获取_我的路由器上网账号和口令忘记了该怎么办
- Dynamsoft Barcode Reader Crack,强大而快速的条码解码
- 日积(Running)月累(ZSSURE):看山不是山看水不是水,2017
- 记录一下腾讯视频桌面windows客户端面试(一面)
- 100base - CX/FX/LX/SX/ZX
- 认识SlackwareLinux及制作系统安装磁片之关於bootdisk(转)
- 阿里云服务器域名备案
- 程序员初创公司的合伙人股权的进入和退出机制设计-20151020
- mysql limit括号_MYSQL中LIMIT使用简介
- 适合小白入门的随机森林介绍
热门文章
- 蛛网时代:敲黑板!数据可视化是黑科技却不是神器!
- 千锋教育与京东云生态战略合作签约仪式在京举行
- windows95 mac最新版(windows95系统体验软件)支持arm
- oracle存储过程 论文,Oracle中基于Java的存储过程开发_计算机论文
- Pycharm运行时出现Could not load the Qt platform plugin “xcb“问题
- 电力 计算机监控系统,电力监控系统是什么,它的主要功能有哪些
- 计算机主机外部连接设备图,外部设备必须通过什么与主机连接
- c++中的标准模板库
- 目录浏览(目录遍历)漏洞和任意文件读取/下载漏洞
- nvidia-smi命令失效