三种定位总结

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  }

 

 

 

 

 

你可能感兴趣的:(总结)