GPS是Global Positioning System(全球定位系統)的簡稱,它的作用就是爲全球的物體提供定位功能。GPS定位是一門高新技術,但對於Android程序員來說,開發GPS功能的應用程序又十分簡單,Android爲此提供LocationManager類及其他幾個輔助類,開發人員可以非常方便地開發出GPS應用。在程序中,通過getSystemService獲得LocationManager對象之後,就可以調用LocationManager提供的常用方法:
在上面方法中涉及另一個重要的類:LocationProvider(定位提供者),就是GPS定位組件的抽象表示,它提供瞭如下方法來獲取定位組件的相關信息:
另外,GPS支持還涉及到另一個類:Location,它是一個代表位置信息的抽象類,它提供如下方法來獲取定位信息:
另外,在獲取LocationProvider時,往往需要加上過濾條件,即Criteria,Criteria提供如下方法來設置過濾條件:
使用上面三個類及其提供的方法就可以獲取GPS定位信息了,步驟如下:
1、獲取系統的LocationManager對象。
2、使用LocationManager,通過指定LocationProvider來獲取定位信息,定位信息由對象Location表示。
3、從Location對象中獲取定位信息。
下面用一個簡單的示例來演示,根據不同方式獲取LocationProvider定位信息,代碼如下:
Activity:
- package com.home.locationprovider;
- import java.util.ArrayList;
- import java.util.List;
- import android.app.Activity;
- import android.content.Context;
- import android.location.Criteria;
- import android.location.LocationManager;
- import android.os.Bundle;
- import android.view.View;
- import android.widget.ArrayAdapter;
- import android.widget.ListView;
- public class LocationProviderTestActivity extends Activity {
- private ListView listView;
- private LocationManager locationManager;
- // 存放LocationProvider名稱的集合
- private List<String> providerNames = new ArrayList<String>();
- private ArrayAdapter<String> adapter;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- listView = (ListView) findViewById(R.id.main_lv_show);
- // 獲取系統的LocationManager對象
- locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
- }
- public void click(View v) {
- if (v.getId() == R.id.main_btn_get_all) {
- // 獲取系統所有的LocationProvider的名稱
- providerNames = locationManager.getAllProviders();
- adapter = new ArrayAdapter<String>(this,
- android.R.layout.simple_list_item_1, providerNames);
- listView.setAdapter(adapter);
- }
- if (v.getId() == R.id.main_btn_get_criteria) {
- // 創建一個LocationProvider的過濾條件
- Criteria criteria = new Criteria();
- // 設置要求LocationProvider必須使免費的
- criteria.setCostAllowed(false);
- // 設置要求LocationProvider能提供高度信息
- criteria.setAltitudeRequired(true);
- // 設置要求LocationProvider能提供方向信息
- criteria.setBearingRequired(true);
- // 獲取系統所有符合條件的LocationProvider的名稱
- providerNames = locationManager.getProviders(criteria, true);
- adapter = new ArrayAdapter<String>(this,
- android.R.layout.simple_list_item_1, providerNames);
- listView.setAdapter(adapter);
- }
- if (v.getId() == R.id.main_btn_get_byname) {
- providerNames.clear();
- // 根據名稱獲取指定的LocationProvider的名稱
- providerNames.add(locationManager.getProvider(
- LocationManager.GPS_PROVIDER).getName());
- adapter = new ArrayAdapter<String>(this,
- android.R.layout.simple_list_item_1, providerNames);
- listView.setAdapter(adapter);
- }
- }
- }
佈局XML:
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical" >
- <Button
- android:id="@+id/main_btn_get_all"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:onClick="click"
- android:text="獲取所有LocationProvider" />
- <Button
- android:id="@+id/main_btn_get_criteria"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:onClick="click"
- android:text="根據條件獲取LocationProvider" />
- <Button
- android:id="@+id/main_btn_get_byname"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:onClick="click"
- android:text="獲取指定的LocationProvider" />
- <ListView
- android:id="@+id/main_lv_show"
- android:layout_width="match_parent"
- android:layout_height="wrap_content" />
- </LinearLayout>
權限:
- <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
附上圖片效果:
轉自這裏:http://blog.csdn.net/u010142437/article/category/1435920