在项目终需要开启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信号强弱相关推荐

  1. qpython获取手机gps_基于Python获取照片的GPS位置信息

    这篇文章主要介绍了基于Python获取照片的GPS位置信息,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 昨天听人说,用手机拍照会带着GPS信息,原 ...

  2. java 获取手机归属地_java 获取手机归属地

    java 获取手机归属地 [2021-01-30 20:46:44]  简介: php去除nbsp的方法:首先创建一个PHP代码示例文件:然后通过"preg_replace("/( ...

  3. java获取手机安装app_Android之——获取手机安装的应用程序

    前几篇有关Android的博文中.向大家介绍了几个项目中经常使用的有用功能.那么在这篇博文中.我将向大家介绍怎样获取Android手机中已经安装的手机应用程序,有用过金山手机卫士或者360手机卫士的童 ...

  4. php 获取手机设备id,H5获取手机设备信息、app版本信息、ip地址

    获取手机设备的相关信息,如IMEI.IMSI.型号.厂商等.通过plus.device获取设备信息管理对象. 获取当前运行环境信息.与其它程序进行通讯等.通过plus.runtime可获取运行环境管理 ...

  5. Android 获取手机系统版本号、获取手机型号、获取手机厂商、获取手机IMEI、获取手机CPU_ABI、获取手机唯一识别码

    1.先申请权限,关于如何申请权限请查看RxPermissions的使用(简单实用)_ErwinNakajima的博客-CSDN博客 2.手機唯一識別碼管理類. package com.phone.co ...

  6. php获取手机设备信息,H5获取手机设备信息、app版本信息、ip地址

    获取手机设备的相关信息,如IMEI.IMSI.型号.厂商等.通过plus.device获取设备信息管理对象. 获取当前运行环境信息.与其它程序进行通讯等.通过plus.runtime可获取运行环境管理 ...

  7. php 获取手机设备的ID,获取苹果设备的UDID

    苹果开发中,经常会添加测试设备UDID,通常在fir.蒲公英等平台获取,除了此类平台我们自己也可以实现UDID的获取,下面就通过已有苹果开发证书和模板来获取苹果设备的UDID. 先体验一下:获取UDI ...

  8. java获取手机通讯录权限_android获取手机通讯录

    1:androidmanifest.xml的内容 package="cn.itcast.contacts" android:versionCode="1" an ...

  9. python 写脚本 获取qq好友地理位置_Python获取统计自己的qq群成员信息的方法

    这篇文章主要介绍了Python获取统计自己的qq群成员信息的方法,本文分步骤给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 首先说明一下需要使用的工具以及技术:python3 + ...

最新文章

  1. php sql 时间 函数,PHP模拟SQL Server的两个日期处理函数
  2. 3.APC的挂入过程
  3. 河南理工大学新生挑战赛【部分题题解】
  4. mac安装mysql mysql命令找不到_MacBook通过Homebrew安装mysql
  5. Git、TortoiseGit、GitHub、Gitee、GitLab 安装与入门使用
  6. (Docker实战) 第3篇:Centos7 拉取和部署Mysql
  7. 高橋君とカード / Tak and Cards(AtCoder-2037)
  8. Hibernate框架 五种查询方式
  9. MVVM 自动生成编号
  10. centos6.5 安装mysql5.6多实例(多配置文件)
  11. sqoop从hive导入数据到mysql时出现主键冲突
  12. 代码是写给人看的还是写给机器看的?
  13. Test on 01/19/2019
  14. html立体音乐相册源码,印记工坊立体音乐相册 v 1.8 官方版|印记工坊立体音乐相册官方版|印记工坊立体音乐相册电脑版_最火软件站...
  15. 柳婼、知乎PAT经验分享汇总
  16. photoshop柔光模式原理和案例教程
  17. 国际上炒黄金平台有哪些
  18. LS-DYNA (动力分析程序)
  19. bzoj3238 [ AHOI2013 ] --后缀自动机
  20. KKT (LICQ)

热门文章

  1. PyTorch消除训练瓶颈 提速技巧
  2. 借鉴《观沧海》作现代爱情诗一篇
  3. 如何制作二维码?手把手教你制作
  4. 【Spark】实验6 Spark机器学习库MLlib编程实践
  5. 服务器文件扩展名怎么改,修改服务器配置 让asp.net文件后缀名随心所欲
  6. 支付宝商家当面付接入java-web
  7. Bootstrap 教程第三课:制作有图标的按钮
  8. 【转】TransactionScope事务简介
  9. Bug解决:Failed to load resource the server responded with a status of 404 ()
  10. scanf和getchar缓冲区中问题的解疑