android获取手机位置服务

时间:2021-02-28 10:51:45

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