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

Android通過GPS獲得經緯度

真機不行,模擬器可以。手機有問題,先記錄代碼再說。

代碼如下:

AndroidManifest.xml

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  3.           package="basic.android.lesson26"  
  4.           android:versionCode="1"  
  5.           android:versionName="1.0">  
  6.     <uses-sdk android:minSdkVersion="7"/>  
  7.     <application android:label="@string/app_name">  
  8.         <activity android:name=".TestMyGPS"  
  9.                   android:label="@string/app_name">  
  10.             <intent-filter>  
  11.                 <action android:name="android.intent.action.MAIN"/>  
  12.                 <category android:name="android.intent.category.LAUNCHER"/>  
  13.             </intent-filter>  
  14.         </activity>  
  15.     </application>  
  16.   
  17.     <!-- 粗略定位授權 -->  
  18.     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>  
  19.     <!-- 精細定位授權 -->  
  20.     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>  
  21. </manifest>  
  22.           
main.xml
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.               android:orientation="vertical"  
  4.               android:layout_width="fill_parent"  
  5.               android:layout_height="fill_parent"  
  6.         >  
  7.     <Button android:id="@+id/button1"  
  8.             android:layout_width="fill_parent"  
  9.             android:layout_height="wrap_content"  
  10.             android:text="ok"/>  
  11.     <TextView android:id="@+id/textView1"  
  12.               android:layout_width="fill_parent"  
  13.               android:layout_height="wrap_content"  
  14.               android:text="Hello World, MainActivity"  
  15.             />  
  16.     <TextView android:id="@+id/show_status"  
  17.               android:layout_width="fill_parent"  
  18.               android:layout_height="wrap_content"  
  19.               android:text="init"/>  
  20.   
  21.     <TextView android:id="@+id/temp_text"  
  22.               android:layout_width="fill_parent"  
  23.               android:layout_height="wrap_content"  
  24.               android:text="臨時"/>  
  25. </LinearLayout>  
TestMyGPS.java
  1. package basic.android.lesson26;  
  2.   
  3. import android.app.Activity;  
  4. import android.content.Context;  
  5. import android.content.Intent;  
  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.provider.Settings;  
  12. import android.util.Log;  
  13. import android.view.View;  
  14. import android.widget.Button;  
  15. import android.widget.TextView;  
  16. import android.widget.Toast;  
  17.   
  18. public class TestMyGPS extends Activity {  
  19.   
  20.     private static final String TAG = "TestMyGPS";  
  21.     Button mButton;  
  22.     TextView tv1;  
  23.     TextView mStatus;  
  24.     TextView mTemp;  
  25.     LocationManager mlm;  
  26.     LocationListener locationListener;  
  27.     String mFilter;  
  28.   
  29.     @Override  
  30.     public void onCreate(Bundle savedInstanceState) {  
  31.         super.onCreate(savedInstanceState);  
  32.         setContentView(R.layout.main);  
  33.   
  34.         // 定義UI組件   
  35.         mButton = (Button) findViewById(R.id.button1);  
  36.         tv1 = (TextView) findViewById(R.id.textView1);  
  37.         mStatus = (TextView) findViewById(R.id.show_status);  
  38.         mTemp = (TextView) findViewById(R.id.temp_text);  
  39.   
  40.   
  41.         mButton.setOnClickListener(new View.OnClickListener() {  
  42.             public void onClick(android.view.View view) {  
  43.                 // 轉至 GPS 設置界面   
  44.                 Intent intent = new Intent(Settings.ACTION_SECURITY_SETTINGS);  
  45.                 startActivityForResult(intent, 0);  
  46.             }  
  47.         });  
  48.         // 獲取LocationManager對象   
  49.         mlm = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);  
  50.   
  51.         // 定義Criteria對象   
  52.   
  53.         // 獲取GPS信息提供者   
  54.         Criteria filter = getFilter();  
  55.         mFilter = mlm.getBestProvider(filter, true);  
  56.   
  57. //        try {   
  58. //            mlm.setTestProviderEnabled(mFilter, true);   
  59. //        } catch (IllegalArgumentException e) {   
  60. //            String err = "IllegalArgumentException=" + e.getMessage();   
  61. //            Log.e(TAG, err);   
  62. //            Toast.makeText(this, err, Toast.LENGTH_LONG).show();   
  63. //        }   
  64. //        openGPS();   
  65.         gpsStatus();  
  66.         // 位置監聽器   
  67.         locationListener = new LocationListener() {  
  68.   
  69.             // 當位置改變時觸發   
  70.             public void onLocationChanged(Location location) {  
  71.                 updateLocation(location);  
  72.                 Toast.makeText(TestMyGPS.this"onLocationChanged=" + location, Toast.LENGTH_LONG).show();  
  73.                 gpsStatus();  
  74.                 mTemp.setText("onLocationChanged="+location);  
  75.             }  
  76.   
  77.             // Provider失效時觸發   
  78.             public void onProviderDisabled(String arg0) {  
  79.                 gpsStatus();  
  80.                 mTemp.setText("onProviderDisabled=" + arg0);  
  81.             }  
  82.   
  83.             // Provider可用時觸發   
  84.             public void onProviderEnabled(String arg0) {  
  85.                 gpsStatus();  
  86.                 mTemp.setText("onProviderEnabled=" + arg0);  
  87.             }  
  88.   
  89.             // Provider狀態改變時觸發   
  90.             public void onStatusChanged(String arg0, int arg1, Bundle arg2) {  
  91.                 mTemp.setText("onStatusChanged=" + arg0);  
  92.             }  
  93.         };  
  94.   
  95.         // 500毫秒更新一次,忽略位置變化   
  96.         mlm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5003, locationListener);  
  97.   
  98.     }  
  99.   
  100.   
  101.     private void openGPS() {  
  102. //        if (mlm.isProviderEnabled(LocationManager.GPS_PROVIDER)) {   
  103. //            Toast.makeText(this, " 位置源已設置! ", Toast.LENGTH_SHORT).show();   
  104. //            return;   
  105. //        }   
  106. //   
  107. //        Toast.makeText(this, " 位置源未設置! ", Toast.LENGTH_SHORT).show();   
  108.     }  
  109.   
  110.     private Criteria getFilter() {  
  111.         Criteria criteria = new Criteria();  
  112.         // 設置定位精確度 Criteria.ACCURACY_COARSE 比較粗略, Criteria.ACCURACY_FINE則比較精細   
  113.         criteria.setAccuracy(Criteria.ACCURACY_FINE);  
  114.         // 設置是否需要海拔信息 Altitude   
  115.         criteria.setAltitudeRequired(false);  
  116.         // 設置是否需要方位信息 Bearing   
  117.         criteria.setBearingRequired(false);  
  118.         // 設置是否允許運營商收費   
  119.         criteria.setCostAllowed(true);  
  120.         // 設置對電源的需求   
  121.         criteria.setPowerRequirement(Criteria.POWER_LOW);  
  122.         return criteria;  
  123.     }  
  124.   
  125.     private void gpsStatus() {  
  126.         if (mlm.isProviderEnabled(LocationManager.GPS_PROVIDER)) {  
  127.             mStatus.setText("GPS開啟");  
  128.         } else {  
  129.             mStatus.setText("GPS未開啟");  
  130.             Toast.makeText(this" 位置源未設置! ", Toast.LENGTH_SHORT).show();  
  131.             // 轉至 GPS 設置界面   
  132.             Intent intent = new Intent(Settings.ACTION_SECURITY_SETTINGS);  
  133.             startActivityForResult(intent, 0);  
  134.         }  
  135.     }  
  136.   
  137.     // 更新位置信息   
  138.     private void updateLocation(Location location) {  
  139.         if (location != null) {  
  140.             tv1.setText("更新位置:" + location.toString() + "\n\t其中經度:" + location.getLongitude() + "\n\t其中緯度:"  
  141.                     + location.getLatitude());  
  142.         } else {  
  143.             tv1.setText("更新位置失敗");  
  144.         }  
  145.     }  
  146.   
  147.     @Override  
  148.     protected void onDestroy() {  
  149.         mlm.removeUpdates(locationListener);  
  150. //        mlm.setTestProviderEnabled(mFilter, false);   
  151.         super.onDestroy();  
  152.     }  
  153. }  
Copyright © Linux教程網 All Rights Reserved