LBS(Location Based Services),又称位置服务,首先它能很容易的获取移动用户当前的实际地理位置,如经纬度、海拔等坐标数据,其次它还能够为用户提供与当前位置相关的增值服务信息,例如附近的餐馆、医院、学校等。而对于获取用户的当前位置,我们可以通过Android系统的GPS定位服务来实现。

       Android提供了基于网络的定位服务和基于卫星的定位服务两种。在设置->位置和安全设置里面的前三项就是与之相关的设置项,最后一个增强型GPS是为了辅助快速找卫星的。

Android GPS设置

       那么我们现在就写一个简单的程序来实现获取当前位置的功能。

       1、新建项目Lesson26_GPSLocation。

       2、MainActivity.java的代码如下:

Java代码
  1. package basic.android.lesson26;   
  2.   
  3. import android.app.Activity;   
  4. import android.content.Context;   
  5. import android.location.Criteria;   
  6. import android.location.Location;   
  7. import android.location.LocationListener;   
  8. import android.location.LocationManager;   
  9. import android.os.Bundle;   
  10. import android.util.Log;   
  11. import android.view.View;   
  12. import android.widget.Button;   
  13. import android.widget.TextView;   
  14.   
  15. public class MainActivity extends Activity {   
  16.   
  17.     TextView tv1;   
  18.     Location location;   
  19.   
  20.     @Override  
  21.     public void onCreate(Bundle savedInstanceState) {   
  22.         super.onCreate(savedInstanceState);   
  23.         setContentView(R.layout.main);   
  24.   
  25.         // 定义UI组件   
  26.         Button b1 = (Button) findViewById(R.id.button1);   
  27.         tv1 = (TextView) findViewById(R.id.textView1);   
  28.   
  29.         // 获取LocationManager对象   
  30.         LocationManager lm = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);   
  31.   
  32.         // 定义Criteria对象   
  33.         Criteria criteria = new Criteria();   
  34.         // 设置定位精确度 Criteria.ACCURACY_COARSE 比较粗略, Criteria.ACCURACY_FINE则比较精细   
  35.         criteria.setAccuracy(Criteria.ACCURACY_FINE);   
  36.         // 设置是否需要海拔信息 Altitude   
  37.         criteria.setAltitudeRequired(true);   
  38.         // 设置是否需要方位信息 Bearing   
  39.         criteria.setBearingRequired(true);   
  40.         // 设置是否允许运营商收费   
  41.         criteria.setCostAllowed(true);   
  42.         // 设置对电源的需求   
  43.         criteria.setPowerRequirement(Criteria.POWER_LOW);   
  44.   
  45.         // 获取GPS信息提供者   
  46.         String bestProvider = lm.getBestProvider(criteria, true);   
  47.         Log.i("yao""bestProvider = " + bestProvider);   
  48.   
  49.         // 获取定位信息   
  50.         location = lm.getLastKnownLocation(bestProvider);   
  51.   
  52.         // 给按钮绑定点击监听器   
  53.         b1.setOnClickListener(new View.OnClickListener() {   
  54.             @Override  
  55.             public void onClick(View v) {   
  56.                 updateLocation(location);   
  57.             }   
  58.         });   
  59.   
  60.         // 位置监听器   
  61.         LocationListener locationListener = new LocationListener() {   
  62.   
  63.             // 当位置改变时触发   
  64.             @Override  
  65.             public void onLocationChanged(Location location) {   
  66.                 Log.i("yao", location.toString());   
  67.                 updateLocation(location);   
  68.             }   
  69.   
  70.             // Provider失效时触发   
  71.             @Override  
  72.             public void onProviderDisabled(String arg0) {   
  73.                 Log.i("yao", arg0);   
  74.   
  75.             }   
  76.   
  77.             // Provider可用时触发   
  78.             @Override  
  79.             public void onProviderEnabled(String arg0) {   
  80.                 Log.i("yao", arg0);   
  81.             }   
  82.   
  83.             // Provider状态改变时触发   
  84.             @Override  
  85.             public void onStatusChanged(String arg0, int arg1, Bundle arg2) {   
  86.                 Log.i("yao""onStatusChanged");   
  87.             }   
  88.         };   
  89.   
  90.         // 500毫秒更新一次,忽略位置变化   
  91.         lm.requestLocationUpdates(bestProvider, 5000, locationListener);   
  92.   
  93.     }   
  94.   
  95.     // 更新位置信息   
  96.     private void updateLocation(Location location) {   
  97.         if (location != null) {   
  98.             tv1.setText("定位对象信息如下:" + location.toString() + "\n\t其中经度:" + location.getLongitude() + "\n\t其中纬度:"  
  99.                     + location.getLatitude());   
  100.         } else {   
  101.             Log.i("yao""没有获取到定位对象Location");   
  102.         }   
  103.     }   
  104. }  

       3、main.xml我就不贴代码了,就一个按钮和一个文本框,等一下看看截图就会明白。

       4、要在AndroidManifest.xml中加入权限才行:

XML/HTML代码
  1. <!-- 粗略定位授权 -->  
  2. <USES android:name="android.permission.ACCESS_COARSE_LOCATION" -permission></USES>  
  3. <!-- 精细定位授权 -->  
  4. <USES android:name="android.permission.ACCESS_FINE_LOCATION" -permission></USES>  
  5. <!-- 模拟定位授权 -->  
  6. <USES android:name="android.permission.ACCESS_MOCK_LOCATION" -permission></USES>  
  7. <!-- 网络访问授权 -->  
  8. <USES android:name="android.permission.INTERNET" -permission></USES>  

       5、在真机上编译运行程序,查看结果:

使用GPS获取当前地理位置

       这里要说明一下,我在模拟器上提交模拟器数据没成功,在真机上测试也不是很顺利,一和硬件有关就总会出一些莫名其妙的错误。

本文发布:Android开发网
本文地址:http://www.jizhuomi.com/android/course/186.html
2012年9月3日
发布:鸡啄米 分类:Android开发教程 浏览: 评论:1