zoukankan      html  css  js  c++  java
  • 三种定位总结

    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  }
  • 相关阅读:
    集合容器概述
    enum枚举类型
    this关键字、this()、super()
    重载与重写
    nginx报404的可能错误
    nginx常用命令
    vbs系统监控
    VBS windows监控
    Oracle SQL优化[转]
    shell /bin/bash^M: bad interpreter错误解决
  • 原文地址:https://www.cnblogs.com/xmb7/p/2917466.html
Copyright © 2011-2022 走看看