歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Android獲取GPS坐標

Android獲取GPS坐標:

  1. package an.android.application;  
  2.   
  3.   
  4. import java.util.Iterator;  
  5.   
  6. import android.app.Activity;  
  7. import android.content.Intent;  
  8.   
  9. import android.location.GpsSatellite;  
  10. import android.location.GpsStatus;  
  11. import android.location.Location;  
  12. import android.location.LocationListener;  
  13. import android.location.LocationManager;  
  14. import android.os.Bundle;  
  15. import android.util.Log;  
  16. import android.view.Menu;  
  17. import android.view.MenuItem;  
  18. import android.view.View;  
  19. import android.widget.Button;  
  20. import android.widget.Toast;  
  21.   
  22. public class SpeedToll extends Activity {  
  23.     /** Called when the activity is first created. */  
  24.       
  25.       
  26.     private static final int    Search      = Menu.FIRST;  
  27.     private static final int    Myloc       = Menu.FIRST + 1;  
  28.     private static final int    Exit        = Menu.FIRST + 2;  
  29.       
  30.       
  31.     private LocationManager locationManager;  
  32.     private GpsStatus gpsstatus;  
  33.       
  34.       
  35.     @Override  
  36.     public void onCreate(Bundle savedInstanceState) {  
  37.           
  38.         super.onCreate(savedInstanceState);  
  39.         /* 加載main.xml Layout */   
  40.         setContentView(R.layout.desktop);  
  41.         /* 以findViewById()取得Button對象,並加入onClickListener */  
  42.         Button b1 = (Button) findViewById(R.id.button1);  
  43.         b1.setOnClickListener(new Button.OnClickListener()  
  44.         {   
  45.           public void onClick(View v)   
  46.           {  
  47.             /* new一個Intent對象,並指定要啟動的class */   
  48.             Intent intent = new Intent();   
  49.             intent.setClass(SpeedToll.this, Map.class);   
  50.             /* 調用一個新的Activity */   
  51.             startActivity(intent);  
  52.             /* 關閉原本的Activity */   
  53.             //SpeedToll.this.finish();   
  54.             }   
  55.           });  
  56.           
  57.           
  58.         Button b2 = (Button) findViewById(R.id.button1);  
  59.         b2.setOnClickListener(new Button.OnClickListener()  
  60.         {   
  61.           public void onClick(View v)   
  62.           {  
  63.             /* new一個Intent對象,並指定要啟動的class */   
  64.             Intent intent = new Intent();   
  65.             intent.setClass(SpeedToll.this, Map.class);   
  66.             /* 調用一個新的Activity */   
  67.             startActivity(intent);  
  68.             /* 關閉原本的Activity */   
  69.             //SpeedToll.this.finish();   
  70.             }   
  71.           });  
  72.     }   
  73.       
  74.     public boolean onCreateOptionsMenu(Menu menu) {  
  75.         super.onCreateOptionsMenu(menu);  
  76.         menu.add(0, Search, Menu.NONE, "搜索");  
  77.         menu.add(0, Myloc, Menu.NONE, "定位");   
  78.         menu.add(0, Exit, Menu.NONE, "退出");  
  79.           
  80.           
  81.         return true;    
  82.     }//menu   
  83.    
  84.     public boolean onOptionsItemSelected(MenuItem item)  
  85.     {  
  86.         //super.onOptionsItemSelected(item);   
  87.         switch(item.getItemId()){  
  88.             case Search:  
  89.                 //Search();   
  90.                 break;  
  91.                   
  92.             case Myloc:  
  93.                 GetMyLocation();  
  94.                 break;  
  95.                   
  96.             case Exit:  
  97.                 //mLocationManager.removeUpdates(this); //關閉GPS   
  98.                   
  99.                 this.finish();  
  100.                 break;  
  101.         }  
  102.         return super.onOptionsItemSelected(item);  
  103.     }  
  104.       
  105.       
  106.     public boolean GetMyLocation(){  
  107.         //獲取到LocationManager對象   
  108.         locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);  
  109.           
  110.         //根據設置的Criteria對象,獲取最符合此標准的provider對象   
  111.         String currentProvider = locationManager.getProvider(LocationManager.GPS_PROVIDER).getName();  
  112.           
  113.         //根據當前provider對象獲取最後一次位置信息   
  114.         Location currentLocation = locationManager.getLastKnownLocation(currentProvider);  
  115.         //如果位置信息為null,則請求更新位置信息   
  116.         if(currentLocation == null){  
  117.             locationManager.requestLocationUpdates(currentProvider, 00, locationListener);  
  118.         }  
  119.         //增加GPS狀態監聽器   
  120.         locationManager.addGpsStatusListener(gpsListener);  
  121.           
  122.         //直到獲得最後一次位置信息為止,如果未獲得最後一次位置信息,則顯示默認經緯度   
  123.         //每隔10秒獲取一次位置信息   
  124.         while(true){  
  125.             currentLocation = locationManager.getLastKnownLocation(currentProvider);  
  126.             if(currentLocation != null){  
  127.                 Log.d("Location""Latitude: " + currentLocation.getLatitude());  
  128.                 Log.d("Location""location: " + currentLocation.getLongitude());  
  129.                 Toast.makeText(SpeedToll.this"Latitude: " + currentLocation.getLatitude()+ " "  
  130.                         +"location: " + currentLocation.getLongitude(), Toast.LENGTH_SHORT).show();  
  131.                 break;  
  132.             }else{  
  133.                 Log.d("Location""Latitude: " + 0);  
  134.                 Log.d("Location""location: " + 0);  
  135.             }  
  136.             try {  
  137.                 Thread.sleep(10000);  
  138.             } catch (InterruptedException e) {  
  139.                  Log.e("Location", e.getMessage());  
  140.             }  
  141.         }  
  142.         return false;  
  143.      }  
  144.        
  145.      private GpsStatus.Listener gpsListener = new GpsStatus.Listener(){  
  146.          //GPS狀態發生變化時觸發   
  147.          @Override  
  148.          public void onGpsStatusChanged(int event) {  
  149.              //獲取當前狀態   
  150.              gpsstatus=locationManager.getGpsStatus(null);  
  151.              switch(event){  
  152.                  //第一次定位時的事件   
  153.                  case GpsStatus.GPS_EVENT_FIRST_FIX:  
  154.                      break;  
  155.                  //開始定位的事件   
  156.                  case GpsStatus.GPS_EVENT_STARTED:  
  157.                      break;  
  158.                  //發送GPS衛星狀態事件   
  159.                  case GpsStatus.GPS_EVENT_SATELLITE_STATUS:  
  160.                      Toast.makeText(SpeedToll.this"GPS_EVENT_SATELLITE_STATUS", Toast.LENGTH_SHORT).show();  
  161.                      Iterable<GpsSatellite> allSatellites = gpsstatus.getSatellites();     
  162.                      Iterator<GpsSatellite> it=allSatellites.iterator();   
  163.                      int count = 0;  
  164.                      while(it.hasNext())     
  165.                      {     
  166.                          count++;  
  167.                      }  
  168.                      Toast.makeText(SpeedToll.this"Satellite Count:" + count, Toast.LENGTH_SHORT).show();  
  169.                      break;  
  170.                  //停止定位事件   
  171.                  case GpsStatus.GPS_EVENT_STOPPED:  
  172.                      Log.d("Location""GPS_EVENT_STOPPED");  
  173.                      break;  
  174.              }  
  175.          }  
  176.      };  
  177.        
  178.        
  179.      //創建位置監聽器   
  180.      private LocationListener locationListener = new LocationListener(){  
  181.          //位置發生改變時調用   
  182.          @Override  
  183.          public void onLocationChanged(Location location) {  
  184.              Log.d("Location""onLocationChanged");  
  185.          }  
  186.    
  187.          //provider失效時調用   
  188.          @Override  
  189.          public void onProviderDisabled(String provider) {  
  190.              Log.d("Location""onProviderDisabled");  
  191.          }  
  192.    
  193.          //provider啟用時調用   
  194.          @Override  
  195.          public void onProviderEnabled(String provider) {  
  196.              Log.d("Location""onProviderEnabled");  
  197.          }  
  198.    
  199.          //狀態改變時調用   
  200.          @Override  
  201.          public void onStatusChanged(String provider, int status, Bundle extras) {  
  202.              Log.d("Location""onStatusChanged");  
  203.          }  
  204.            
  205.           
  206.     };  
  207.       
  208. }  

主要有兩個文件,一個是主文件,一個是xml文件。

更多Android相關信息見Android 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=11

Copyright © Linux教程網 All Rights Reserved