第一步、添加权限

<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"/>

第二步、后台实现

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "MainActivity";
private LocationManager locationManager;
private String locationProvider;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
locationManager = (LocationManager) getSystemService(getApplicationContext().LOCATION_SERVICE);
//下面注释的代码获取的location为null,所以采用Criteria的方式。
/*List<String> providers = locationManager.getProviders(true);
if (providers.contains(LocationManager.GPS_PROVIDER)) {
//如果是GPS
locationProvider = LocationManager.GPS_PROVIDER;
Log.d(TAG, "onCreate: gps=" + locationProvider);
} else if (providers.contains(LocationManager.NETWORK_PROVIDER)) {
//如果是Network
locationProvider = LocationManager.NETWORK_PROVIDER;
Log.d(TAG, "onCreate: network=" + locationProvider);
} else {
Log.d(TAG, "onCreate: 没有可用的位置提供器");
Toast.makeText(this,"没有可用的位置提供器",Toast.LENGTH_SHORT).show();
return;
}
//获取Location,老是获取为空!所以用locationManager.getBestProvider(criteria, true);
Location location = locationManager.getLastKnownLocation(locationProvider);
*/
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_COARSE);//低精度,如果设置为高精度,依然获取不了location。
criteria.setAltitudeRequired(false);//不要求海拔
criteria.setBearingRequired(false);//不要求方位
criteria.setCostAllowed(true);//允许有花费
criteria.setPowerRequirement(Criteria.POWER_LOW);//低功耗 //从可用的位置提供器中,匹配以上标准的最佳提供器
locationProvider = locationManager.getBestProvider(criteria, true);
if (ActivityCompat.checkSelfPermission(getApplicationContext(),
      Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getApplicationContext(),
      Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
Log.d(TAG, "onCreate: 没有权限 ");
return;
}
Location location = locationManager.getLastKnownLocation(locationProvider);
Log.d(TAG, "onCreate: " + (location == null) + "..");
if (location != null) {
Log.d(TAG, "onCreate: location");
//不为空,显示地理位置经纬度
showLocation(location);
}
//监视地理位置变化
locationManager.requestLocationUpdates(locationProvider, 0, 0, locationListener);
} /**
* LocationListern监听器
* 参数:地理位置提供器、监听位置变化的时间间隔、位置变化的距离间隔、LocationListener监听器
*/ LocationListener locationListener = new LocationListener() { @Override
public void onStatusChanged(String provider, int status, Bundle arg2) { } @Override
public void onProviderEnabled(String provider) {
Log.d(TAG, "onProviderEnabled: " + provider + ".." + Thread.currentThread().getName());
} @Override
public void onProviderDisabled(String provider) {
Log.d(TAG, "onProviderDisabled: " + provider + ".." + Thread.currentThread().getName());
} @Override
public void onLocationChanged(Location location) {
Log.d(TAG, "onLocationChanged: " + ".." + Thread.currentThread().getName());
//如果位置发生变化,重新显示
showLocation(location);
}
}; private void showLocation(Location location) {
Log.d(TAG,"定位成功------->"+"location------>经度为:" + location.getLatitude() + "\n纬度为" + location.getLongitude());
}
}

Android 之 获取地理位置及监听的更多相关文章

  1. android BroadcastReceiver ACTION_TIME_TICK 系统时间监听不到

    android BroadcastReceiver ACTION_TIME_TICK 系统时间监听不到 今天做android上的消息推送,启动了一个独立service,然后在里面监听系统的ACTION ...

  2. android的Home键的监听封装工具类(一)

    android的Home键的监听封装: package com.gzcivil.utils; import android.content.BroadcastReceiver; import andr ...

  3. 获取运行端口监听的用户身份auth-owner

    获取运行端口监听的用户身份auth-owner   Windows系统提供工作在TCP 113端口的授权服务(Authentication Service),用来判断TCP连接的用户.Nmap的aut ...

  4. 【Android代码片段之八】监听Android屏幕是否锁屏

    实现方法:1)通过BroadcastReceiver接收广播Intent.ACTION_SCREEN_ON和Intent.ACTION_SCREEN_OFF可以判断屏幕状态是否锁屏,但是只有屏幕状态发 ...

  5. 【转】Android开发20——单个监听器监听多个按钮点击事件

    原文网址:http://woshixy.blog.51cto.com/5637578/1093936 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律 ...

  6. Android开发之使用广播监听网络状态变化

    我们经常需要判断网络状态的变化,如有无网络,所以需要监听网络状态的变化,比如网络断开,网络连接给予友好提示.如何监听网络状态的变化呢,最近工作中需要用到这个,于是就用广播机制来实现了网络状态的监听. ...

  7. 【Android】添加菜单和监听菜单方法详解

    添加菜单 可以在onCreateOptionsMenu或者onPrepareOptionsMenu方法中来添加菜单 代码添加: menu.add((int groupId, int itemId, i ...

  8. 一步一步学android之事件篇——单选按钮监听事件

    在平常使用软件的时候,我们经常会碰见一些选择题,例如选择性别的时候,在男和女之间选,前面说过这个情况要用RadioGroup组件,那么点击了之后我们该怎么获取到选择的那个值呢,这就是今天要说的OnCh ...

  9. Android 关于在Activity中监听ListView

    Android 开发时,最常用的控件之一就是ListView了,而使用ListView的同时,必然需要对它设置监听器,常用的监听器有这么几个: 1. OnItemClickListener // 监听 ...

随机推荐

  1. ASP.NET Web API中展示实体Link相关的方面

    有时候,向服务端请求一个实体,我们希望返回如下的格式: links: [    href: http://localhost:8901/api/user/diaries/2013-08-17,    ...

  2. 使用 Android 的日志工具LogCat

    Android 中的日志工具类是 Log(android.util.Log),这个类中提供了如下几个方法来供我们打印日志. 1.    Log.v() 这个方法用于打印那些最为琐碎的,意义最小的日志信 ...

  3. Android中的Audio播放:竞争Audio之Audio Focus的应用

    from://http://blog.csdn.net/thl789/article/details/7422931 Android是多任务系统,Audio系统是竞争资源.Android2.2之前,没 ...

  4. 【伊利丹】Hadoop2.0 NN HA实验记录

    1.关于Hadoop2.2.0中HA的介绍 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxNDUxMjEyNA==/font/5a6L5L2T/fo ...

  5. 高效的找出两个List中的不同元素

    /* * TestList.java * Version 1.0.0 * Created on 2017年12月15日 * Copyright ReYo.Cn */ package reyo.sdk. ...

  6. Java获取当前类名的两种方法

    适用于非静态方法:this.getClass().getName() 适用于静态方法:Thread.currentThread().getStackTrace()[1].getClassName() ...

  7. 西部世界第二季全集高清百度云在线观看BT种子迅雷下载

    原名:Westworld地区:美国语言:英语首播:2018-04-23 周一制作公司:HBO类型:科幻/惊悚/悬疑/西部别名:西方极乐园编剧:乔纳森·诺兰 / 丽莎·乔·诺兰导演:乔纳森·诺兰主演:埃 ...

  8. 多个Jar的合并操作

    同事要写Android平台下的打包工具,遇到需要将多个jar合并成一个jar的问题.这里列一下操作步骤: 1.将所有jar文件复制至某临时目录中,通过jar命令解压得到所有的.class文件 > ...

  9. Pandas快速入门(一)

    快速使用 bogon:Documents rousseau$ ipython --pylab Python 3.6.0 (v3.6.0:41df79263a11, Dec 22 2016, 17:23 ...

  10. SKU与SPU

    首先,搞清楚商品与单品的区别.例如,iphone是一个单品,但是在淘宝上当很多商家同时出售这个产品的时候,iphone就是一个商品了. 商品:淘宝叫item,京东叫product,商品特指与商家有关的 ...