三种定位总结

1权限: <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

第一种方式通过JASON来实现,是通过基站方式的,引用文章地址:http://www.cnblogs.com/dartagnan/archive/2011/3/9.html,下载只是实现定位的代码

 1 /** 
 2   * Google定位的实现.<br/> 
 3   * Geolocation的详细信息请参见:<br/> 
 4   * <a 
 5   * href="http://code.google.com/apis/gears/geolocation_network_protocol.html" mce_href="http://code.google.com/apis/gears/geolocation_network_protocol.html"> 
 6   * http://code.google.com/apis/gears/geolocation_network_protocol.html</a> 
 7   */  
 8 public class LocationAct extends Activity {  
 9      private TextView txtInfo;  
10      public void onCreate(Bundle savedInstanceState) {  
11          super.onCreate(savedInstanceState);  
12          setContentView(R.layout.main);  
13          Button btn = (Button) findViewById(R.id.btnStart);  
14          txtInfo = (TextView) findViewById(R.id.txtInfo);  
15          btn.setOnClickListener(new Button.OnClickListener() {  
16              public void onClick(View view) {  
17                  getLocation();  
18              }  
19          });  
20      }  
21      private void getLocation() {  
22          TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);  
23          GsmCellLocation gsmCell = (GsmCellLocation) tm.getCellLocation();  
24          int cid = gsmCell.getCid();  
25          int lac = gsmCell.getLac();  
26          String netOperator = tm.getNetworkOperator();  
27          int mcc = Integer.valueOf(netOperator.substring(0, 3));  
28          int mnc = Integer.valueOf(netOperator.substring(3, 5));  
29          JSONObject holder = new JSONObject();  
30          JSONArray array = new JSONArray();  
31          JSONObject data = new JSONObject();  
32          try {  
33              holder.put("version", "1.1.0");  
34              holder.put("host", "maps.google.com");  
35              holder.put("address_language", "zh_CN");  
36              holder.put("request_address", true);  
37              holder.put("radio_type", "gsm");  
38              holder.put("carrier", "HTC");  
39              data.put("cell_id", cid);  
40              data.put("location_area_code", lac);  
41              data.put("mobile_countyr_code", mcc);  
42              data.put("mobile_network_code", mnc);  
43              array.put(data);  
44              holder.put("cell_towers", array);  
45          } catch (JSONException e) {  
46              e.printStackTrace();  
47          }  
48          DefaultHttpClient client = new DefaultHttpClient();  
49          HttpPost httpPost = new HttpPost("http://www.google.com/loc/json");  
50          StringEntity stringEntity = null;  
51          try {  
52              stringEntity = new StringEntity(holder.toString());  
53          } catch (UnsupportedEncodingException e) {  
54              e.printStackTrace();  
55          }  
56          httpPost.setEntity(stringEntity);  
57          HttpResponse httpResponse = null;  
58          try {  
59              httpResponse = client.execute(httpPost);  
60          } catch (ClientProtocolException e) {  
61              e.printStackTrace();  
62          } catch (IOException e) {  
63              e.printStackTrace();  
64          }  
65          HttpEntity httpEntity = httpResponse.getEntity();  
66          InputStream is = null;  
67          try {  
68              is = httpEntity.getContent();  
69          } catch (IllegalStateException e) {  
70              e.printStackTrace();  
71          } catch (IOException e) {  
72              // TODO Auto-generated catch block  
73              e.printStackTrace();  
74          }  
75          InputStreamReader isr = new InputStreamReader(is);  
76          BufferedReader reader = new BufferedReader(isr);  
77          StringBuffer stringBuffer = new StringBuffer();  
78          try {  
79              String result = "";  
80              while ((result = reader.readLine()) != null) {  
81                  stringBuffer.append(result);  
82              }  
83          } catch (IOException e) {  
84              e.printStackTrace();  
85          }  
86          txtInfo.setText(stringBuffer.toString());  
87      }  
88 }

第二种通过严格的GPS来定位,引用文章地址:http://www.cnblogs.com/wisekingokok/archive/2011/09/06/2168479.html,这里只引用代码

  1 public class MainActivity extends Activity {
  2      private LocationManager locationManager;
  3      private GpsStatus gpsstatus;
  4      @Override
  5      public void onCreate(Bundle savedInstanceState) {
  6         super.onCreate(savedInstanceState);
  7         setContentView(R.layout.main);
  8         
  9         //获取到LocationManager对象
 10         locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
 11         
 12         //根据设置的Criteria对象,获取最符合此标准的provider对象
 13         String currentProvider = locationManager.getProvider(LocationManager.GPS_PROVIDER).getName();
 14         
 15         //根据当前provider对象获取最后一次位置信息
 16         Location currentLocation = locationManager.getLastKnownLocation(currentProvider);
 17         //如果位置信息为null,则请求更新位置信息
 18         if(currentLocation == null){
 19             locationManager.requestLocationUpdates(currentProvider, 0, 0, locationListener);
 20         }
 21         //增加GPS状态监听器
 22         locationManager.addGpsStatusListener(gpsListener);
 23         
 24         //直到获得最后一次位置信息为止,如果未获得最后一次位置信息,则显示默认经纬度
 25         //每隔10秒获取一次位置信息
 26         while(true){
 27             currentLocation = locationManager.getLastKnownLocation(currentProvider);
 28             if(currentLocation != null){
 29                 Log.d("Location", "Latitude: " + currentLocation.getLatitude());
 30                 Log.d("Location", "location: " + currentLocation.getLongitude());
 31                 break;
 32             }else{
 33                 Log.d("Location", "Latitude: " + 0);
 34                 Log.d("Location", "location: " + 0);
 35             }
 36             try {
 37                 Thread.sleep(10000);
 38             } catch (InterruptedException e) {
 39                  Log.e("Location", e.getMessage());
 40             }
 41         }
 42      }
 43      
 44      private GpsStatus.Listener gpsListener = new GpsStatus.Listener(){
 45          //GPS状态发生变化时触发
 46          @Override
 47          public void onGpsStatusChanged(int event) {
 48              //获取当前状态
 49              gpsstatus=locationManager.getGpsStatus(null);
 50              switch(event){
 51                  //第一次定位时的事件
 52                  case GpsStatus.GPS_EVENT_FIRST_FIX:
 53                      break;
 54                  //开始定位的事件
 55                  case GpsStatus.GPS_EVENT_STARTED:
 56                      break;
 57                  //发送GPS卫星状态事件
 58                  case GpsStatus.GPS_EVENT_SATELLITE_STATUS:
 59                      Toast.makeText(MainActivity.this, "GPS_EVENT_SATELLITE_STATUS", Toast.LENGTH_SHORT).show();
 60                      Iterable<GpsSatellite> allSatellites = gpsstatus.getSatellites();   
 61                      Iterator<GpsSatellite> it=allSatellites.iterator(); 
 62                      int count = 0;
 63                      while(it.hasNext())   
 64                      {   
 65                          count++;
 66                      }
 67                      Toast.makeText(MainActivity.this, "Satellite Count:" + count, Toast.LENGTH_SHORT).show();
 68                      break;
 69                  //停止定位事件
 70                  case GpsStatus.GPS_EVENT_STOPPED:
 71                      Log.d("Location", "GPS_EVENT_STOPPED");
 72                      break;
 73              }
 74          }
 75      };
 76      
 77      
 78      //创建位置监听器
 79      private LocationListener locationListener = new LocationListener(){
 80          //位置发生改变时调用
 81          @Override
 82          public void onLocationChanged(Location location) {
 83              Log.d("Location", "onLocationChanged");
 84          }
 85  
 86          //provider失效时调用
 87          @Override
 88          public void onProviderDisabled(String provider) {
 89              Log.d("Location", "onProviderDisabled");
 90          }
 91  
 92          //provider启用时调用
 93          @Override
 94          public void onProviderEnabled(String provider) {
 95              Log.d("Location", "onProviderEnabled");
 96          }
 97  
 98          //状态改变时调用
 99          @Override
100          public void onStatusChanged(String provider, int status, Bundle extras) {
101              Log.d("Location", "onStatusChanged");
102          }
103      };
104  }

第三种主要是通过网络的方式来定位,引用文章地址:http://www.cnblogs.com/wisekingokok/archive/2011/09/05/2167755.html,这里只写代码

  1 package com.test;
  2  
  3  import java.io.IOException;
  4  import java.util.List;
  5  
  6  import android.app.Activity;
  7  import android.location.Address;
  8  import android.location.Criteria;
  9  import android.location.Geocoder;
 10  import android.location.Location;
 11  import android.location.LocationListener;
 12  import android.location.LocationManager;
 13  import android.os.Bundle;
 14  import android.util.Log;
 15  import android.widget.Toast;
 16  
 17  public class MainActivity extends Activity {
 18      @Override
 19      public void onCreate(Bundle savedInstanceState) {
 20         super.onCreate(savedInstanceState);
 21         setContentView(R.layout.main);
 22         
 23         //获取到LocationManager对象
 24         LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
 25         //创建一个Criteria对象
 26         Criteria criteria = new Criteria();
 27         //设置粗略精确度
 28         criteria.setAccuracy(Criteria.ACCURACY_COARSE);
 29         //设置是否需要返回海拔信息
 30         criteria.setAltitudeRequired(false);
 31         //设置是否需要返回方位信息
 32         criteria.setBearingRequired(false);
 33         //设置是否允许付费服务
 34         criteria.setCostAllowed(true);
 35         //设置电量消耗等级
 36         criteria.setPowerRequirement(Criteria.POWER_HIGH);
 37         //设置是否需要返回速度信息
 38         criteria.setSpeedRequired(false);
 39  
 40         //根据设置的Criteria对象,获取最符合此标准的provider对象
 41         String currentProvider = locationManager.getBestProvider(criteria, true);
 42         Log.d("Location", "currentProvider: " + currentProvider);
 43         //根据当前provider对象获取最后一次位置信息
 44         Location currentLocation = locationManager.getLastKnownLocation(currentProvider);
 45         //如果位置信息为null,则请求更新位置信息
 46         if(currentLocation == null){
 47             locationManager.requestLocationUpdates(currentProvider, 0, 0, locationListener);
 48         }
 49         //直到获得最后一次位置信息为止,如果未获得最后一次位置信息,则显示默认经纬度
 50         //每隔10秒获取一次位置信息
 51         while(true){
 52             currentLocation = locationManager.getLastKnownLocation(currentProvider);
 53             if(currentLocation != null){
 54                 Log.d("Location", "Latitude: " + currentLocation.getLatitude());
 55                 Log.d("Location", "location: " + currentLocation.getLongitude());
 56                 break;
 57             }else{
 58                 Log.d("Location", "Latitude: " + 0);
 59                 Log.d("Location", "location: " + 0);
 60             }
 61             try {
 62                 Thread.sleep(10000);
 63             } catch (InterruptedException e) {
 64                  Log.e("Location", e.getMessage());
 65             }
 66         }
 67         
 68         //解析地址并显示
 69         Geocoder geoCoder = new Geocoder(this);
 70         try {
 71             int latitude = (int) currentLocation.getLatitude();
 72             int longitude = (int) currentLocation.getLongitude();
 73             List<Address> list = geoCoder.getFromLocation(latitude, longitude, 2);
 74             for(int i=0; i<list.size(); i++){
 75                 Address address = list.get(i); 
 76                 Toast.makeText(MainActivity.this, address.getCountryName() + address.getAdminArea() + address.getFeatureName(), Toast.LENGTH_LONG).show();
 77             }
 78         } catch (IOException e) {
 79             Toast.makeText(MainActivity.this,e.getMessage(), Toast.LENGTH_LONG).show();
 80         }
 81         
 82      }
 83      
 84      //创建位置监听器
 85      private LocationListener locationListener = new LocationListener(){
 86          //位置发生改变时调用
 87          @Override
 88          public void onLocationChanged(Location location) {
 89              Log.d("Location", "onLocationChanged");
 90              Log.d("Location", "onLocationChanged Latitude" + location.getLatitude());
 91                   Log.d("Location", "onLocationChanged location" + location.getLongitude());
 92          }
 93  
 94          //provider失效时调用
 95          @Override
 96          public void onProviderDisabled(String provider) {
 97              Log.d("Location", "onProviderDisabled");
 98          }
 99  
100          //provider启用时调用
101          @Override
102          public void onProviderEnabled(String provider) {
103              Log.d("Location", "onProviderEnabled");
104          }
105  
106          //状态改变时调用
107          @Override
108          public void onStatusChanged(String provider, int status, Bundle extras) {
109              Log.d("Location", "onStatusChanged");
110          }
111      };
112  }
原文地址:https://www.cnblogs.com/xmb7/p/2917466.html