获取手机Gps地理位置并获取Gps信号强弱
在项目终需要开启gps用来获取地理位置,获取不到地理位置时发送一条广播,进行通知
1,启动服务,在服务中每隔3秒检测gps是否开启以及获取到当前的地理位置
2,将获取到的地理位置发送一条全局广播,便于接收
public class LocationService extends Service implements LocationListener {private String cityName; //当前城市名称private LocationManager locationManager;private Context context;//接收并且处理消息private Handler handler = new Handler(new Handler.Callback() {@Overridepublic boolean handleMessage(Message msg) {if (msg.what == 1) { // Log.e("---", "获取到地理位置" + cityName);Intent intent = new Intent("com.city");intent.putExtra("address", cityName);context.sendBroadcast(intent);}return false;}});private Runnable runnable = new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stub// 要做的事情,这里再次调用此Runnable对象,以实现每两秒实现一次的定时器操作checkGPSIsOpen();}};@Overridepublic void onCreate() {context = this;super.onCreate();}@Nullable@Overridepublic IBinder onBind(Intent intent) {return null;}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);checkGPSIsOpen();handler.postDelayed(runnable, 3000);return START_STICKY;}// private void init() { // // // }private void checkGPSIsOpen() {//获取当前的LocationManager对象locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);boolean isOpen = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);if (!isOpen) {Intent intent = new Intent("com.city");intent.putExtra("address", "");context.sendBroadcast(intent);}List<String> list = locationManager.getAllProviders();boolean bfind = false;for (String c : list) { // Log.e("---c", c);if (c.equals(LocationManager.NETWORK_PROVIDER)) {bfind = true;break;}}try {if (bfind) {Location location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);updateWithNewLocation(location);locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000, 10, this);}} catch (SecurityException e) {e.printStackTrace();}//开始定位 // startLocation();}//获取对应位置的经纬度并且定位城市private void updateWithNewLocation(Location location) {double lat = 0.0, lng = 0.0;if (location != null) {lat = location.getLatitude();lng = location.getLongitude();Log.i("TAG", "经度是" + lat + "纬度是:" + lng);} else {cityName = "";}//通过经纬度获取地址,由于地址会有多个,这个和经纬度精确度有关,本实例中定义了最大的返回数2,即在集合对象中有两个值List<Address> list = null;Geocoder ge = new Geocoder(context);try {list = ge.getFromLocation(lat, lng, 2);} catch (IOException e) {e.printStackTrace();}if (list != null && list.size() > 0) {for (int i = 0; i < list.size(); i++) {Address ad = list.get(i);cityName = ad.getAdminArea() + ad.getSubAdminArea() + ad.getLocality() + ad.getFeatureName();}}handler.postDelayed(runnable, 3000);//发送一条空消息handler.sendEmptyMessage(1);}//位置信息更改执行方法@Overridepublic void onLocationChanged(Location location) {//更新当前的位置信息updateWithNewLocation(location);}@Overridepublic void onProviderDisabled(String provider) {}@Overridepublic void onProviderEnabled(String provider) {}@Overridepublic void onStatusChanged(String provider, int status, Bundle extras) {}@Overridepublic void onDestroy() {super.onDestroy();//保存城市//停止定位stopLocation();}//停止定位private void stopLocation() {locationManager.removeUpdates(this);}}
这是在服务里检测位置的代码
接下来就是在广播中接收的代码了
public class MyBroadcast extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {if (intent.getAction().equals("com.city")) {String address = intent.getStringExtra("address");if (TextUtils.isEmpty(address)) {Toast.makeText(context, "GPS未开启", Toast.LENGTH_SHORT).show();} else {Toast.makeText(context, address, Toast.LENGTH_SHORT).show();}}} }
在这里需要注意的是:
1,在AndroidMainfest.xml中开启地理位置权限
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.INTERNET" />
2,在AndroidMainfest.xml中注册广播和服务
<serviceandroid:name=".LocationService"android:enabled="true"android:exported="true" /><receiver android:name=".MyBroadcast"><intent-filter><action android:name="com.city" /></intent-filter> </receiver>
获取手机Gps地理位置并获取Gps信号强弱相关推荐
- qpython获取手机gps_基于Python获取照片的GPS位置信息
这篇文章主要介绍了基于Python获取照片的GPS位置信息,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 昨天听人说,用手机拍照会带着GPS信息,原 ...
- java 获取手机归属地_java 获取手机归属地
java 获取手机归属地 [2021-01-30 20:46:44] 简介: php去除nbsp的方法:首先创建一个PHP代码示例文件:然后通过"preg_replace("/( ...
- java获取手机安装app_Android之——获取手机安装的应用程序
前几篇有关Android的博文中.向大家介绍了几个项目中经常使用的有用功能.那么在这篇博文中.我将向大家介绍怎样获取Android手机中已经安装的手机应用程序,有用过金山手机卫士或者360手机卫士的童 ...
- php 获取手机设备id,H5获取手机设备信息、app版本信息、ip地址
获取手机设备的相关信息,如IMEI.IMSI.型号.厂商等.通过plus.device获取设备信息管理对象. 获取当前运行环境信息.与其它程序进行通讯等.通过plus.runtime可获取运行环境管理 ...
- Android 获取手机系统版本号、获取手机型号、获取手机厂商、获取手机IMEI、获取手机CPU_ABI、获取手机唯一识别码
1.先申请权限,关于如何申请权限请查看RxPermissions的使用(简单实用)_ErwinNakajima的博客-CSDN博客 2.手機唯一識別碼管理類. package com.phone.co ...
- php获取手机设备信息,H5获取手机设备信息、app版本信息、ip地址
获取手机设备的相关信息,如IMEI.IMSI.型号.厂商等.通过plus.device获取设备信息管理对象. 获取当前运行环境信息.与其它程序进行通讯等.通过plus.runtime可获取运行环境管理 ...
- php 获取手机设备的ID,获取苹果设备的UDID
苹果开发中,经常会添加测试设备UDID,通常在fir.蒲公英等平台获取,除了此类平台我们自己也可以实现UDID的获取,下面就通过已有苹果开发证书和模板来获取苹果设备的UDID. 先体验一下:获取UDI ...
- java获取手机通讯录权限_android获取手机通讯录
1:androidmanifest.xml的内容 package="cn.itcast.contacts" android:versionCode="1" an ...
- python 写脚本 获取qq好友地理位置_Python获取统计自己的qq群成员信息的方法
这篇文章主要介绍了Python获取统计自己的qq群成员信息的方法,本文分步骤给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 首先说明一下需要使用的工具以及技术:python3 + ...
最新文章
- php sql 时间 函数,PHP模拟SQL Server的两个日期处理函数
- 3.APC的挂入过程
- 河南理工大学新生挑战赛【部分题题解】
- mac安装mysql mysql命令找不到_MacBook通过Homebrew安装mysql
- Git、TortoiseGit、GitHub、Gitee、GitLab 安装与入门使用
- (Docker实战) 第3篇:Centos7 拉取和部署Mysql
- 高橋君とカード / Tak and Cards(AtCoder-2037)
- Hibernate框架 五种查询方式
- MVVM 自动生成编号
- centos6.5 安装mysql5.6多实例(多配置文件)
- sqoop从hive导入数据到mysql时出现主键冲突
- 代码是写给人看的还是写给机器看的?
- Test on 01/19/2019
- html立体音乐相册源码,印记工坊立体音乐相册 v 1.8 官方版|印记工坊立体音乐相册官方版|印记工坊立体音乐相册电脑版_最火软件站...
- 柳婼、知乎PAT经验分享汇总
- photoshop柔光模式原理和案例教程
- 国际上炒黄金平台有哪些
- LS-DYNA (动力分析程序)
- bzoj3238 [ AHOI2013 ] --后缀自动机
- KKT (LICQ)
热门文章
- PyTorch消除训练瓶颈 提速技巧
- 借鉴《观沧海》作现代爱情诗一篇
- 如何制作二维码?手把手教你制作
- 【Spark】实验6 Spark机器学习库MLlib编程实践
- 服务器文件扩展名怎么改,修改服务器配置 让asp.net文件后缀名随心所欲
- 支付宝商家当面付接入java-web
- Bootstrap 教程第三课:制作有图标的按钮
- 【转】TransactionScope事务简介
- Bug解决:Failed to load resource the server responded with a status of 404 ()
- scanf和getchar缓冲区中问题的解疑