android获取手机位置服务

Using the Location Manager

    只需要进行一些简单的设置,你的应用程序就可以接受位置更新

第一步:获得权限:

1     <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"/>
2     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
3     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

第二步:获得位置管理者LocationManager

         LocationManager是一个主类,在android里你通过这个类你可以使位置服务。使用方法类似于其他的服务,通过调用getSystemService方法可以获得相应的引用。如果你的应用想要在前台(在Activity里)获得位置更新

1 LocationManager locationManager =  (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);

第三步:挑选一个位置提供者

  android中存在三种位置提供者:1.基于基站的地位服务,精确度不高,在200—2000米之间。

                                           2.基于GPS 精确度在2-10m ,但是获取位置的时候手机所在的地方头顶必须空旷

                                           3.基于网络(3G或者wifi),精确度依赖精确的数据库,例如谷歌纵横

示范1:获取GPS提供者的服务

LocationProvider provider = locationManager.getProvider(LocationManager.GPS_PROVIDER);

示范2:获取手机其中一种位置提供者

  1 package cn.itcast.mobilesafe.engine;
  2 
  3 import android.content.Context;
  4 import android.content.SharedPreferences;
  5 import android.content.SharedPreferences.Editor;
  6 import android.location.Criteria;
  7 import android.location.Location;
  8 import android.location.LocationListener;
  9 import android.location.LocationManager;
 10 import android.os.Bundle;
 11 import android.util.Log;
 12 
 13 public class GPSInfoProvider {
 14     private static GPSInfoProvider mGPSInfoProvider;
 15     private static LocationManager lm;
 16     private static final String tag = "GPSInfoProvider";
 17     private static SharedPreferences sp;
 18 
 19     private GPSInfoProvider() {
 20 
 21     }
 22 
 23     public static GPSInfoProvider getInstance(Context context) {
 24         if (mGPSInfoProvider == null) {
 25             mGPSInfoProvider = new GPSInfoProvider();
 26             // 取得获取位置的服务
 27             lm = (LocationManager) context
 28                     .getSystemService(Context.LOCATION_SERVICE);
 29             Criteria criteria = new Criteria();
 30             // 获取精确的位置ACCURACY_FINE
 31             criteria.setAccuracy(Criteria.ACCURACY_FINE);
 32             // 是否允许付费
 33             criteria.setCostAllowed(true);
 34             // 对电量的要求
 35             criteria.setPowerRequirement(Criteria.POWER_HIGH);
 36             // 是否显示海拔的位置
 37             criteria.setAltitudeRequired(true);
 38 
 39             String provider = lm.getBestProvider(criteria, true);
 40             Log.i(tag, provider);
 41 
 42             // 设置监听事件
 43             MyListener listener = new GPSInfoProvider().new MyListener();
 44             lm.requestLocationUpdates(provider, 60000, 100, listener);
 45             sp = context.getSharedPreferences("config", Context.MODE_PRIVATE);
 46 
 47         }
 48 
 49         return mGPSInfoProvider;
 50 
 51     }
 52 
 53     class MyListener implements LocationListener {
 54 
 55         /**
 56          * 当手机位置发生改变的时候 调用方法
 57          */
 58         public void onLocationChanged(Location location) {
 59             String latitude = "latitude" + location.getLatitude();// 纬度
 60             String longitude = "longitude" + location.getLongitude();// 精度
 61             String accuracy = "accuracy" + location.getAccuracy();// 精确度
 62 
 63             System.out.println("latitude:" + location.getLatitude()
 64                     + "longitude:" + location.getLongitude() + "accuracy:"
 65                     + location.getAccuracy());
 66 
 67             Editor edit = sp.edit();
 68             edit.putString("last_location", latitude + "-" + longitude + "-"
 69                     + accuracy);
 70             edit.commit();
 71 
 72         }
 73 
 74         /**
 75          * 当某个位置提供者不可用的时候,调用方法
 76          */
 77         public void onProviderDisabled(String provider) {
 78 
 79         }
 80 
 81         /**
 82          * 当某个位置提供者可用的时候,调用
 83          */
 84         public void onProviderEnabled(String provider) {
 85 
 86         }
 87 
 88         /**
 89          * 当位置提供者状态发生改变的时候,调用方法
 90          */
 91         public void onStatusChanged(String provider, int status, Bundle extras) {
 92 
 93         }
 94 
 95     }
 96 
 97     public String getLocation() {
 98 
 99         String location = sp.getString("last_location", "");
100         return location;
101 
102     }
103 }

  以上代码,调用getLocation方法即可或得位置信息

  

原文地址:https://www.cnblogs.com/tagie/p/3119483.html