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方法即可或得位置信息