1. 程式人生 > >Android全球定位系統GPS實時獲取位置-劉宇

Android全球定位系統GPS實時獲取位置-劉宇

GPS是全球定位系統,他能夠獲取到你當前的位置、方向、速度、高度等資訊,這樣可以幫助我們實現很多功能,如獲取當前位置等資訊、距離計算、鄰近報警等功能。下面我就帶大家一起來簡單實現第一個功能獲取當前位置等資訊,大牛繞過。

效果圖:

——————————————————————————————————————

首先先介紹一下GPS定位系統API中的兩個重要的方法:

一、LocationManager:位置管理器。要想操作定位相關裝置,必須先定義個LocationManager。我們可以通過如下程式碼建立LocationManger物件。
LocationManger locationManager=(LocationManager)this

.getSystemService(Context.LOCATION_SERVICE); 

二、LocationListener
LocationListener,位置監聽,監聽位置變化,監聽裝置開關與狀態。

三、LocationProvider

LocationProvider類可以獲取與位置提供者相關的資訊Location類是對具體位置資訊的抽象表示。

使用GPS定位的關鍵之一就是獲取LocationProvider,每一個LocationProvider物件都表示一個抽象的定位系統。無論使用GPS做什麼,都需要首先獲取合適的LocationProvider物件

//  獲取passive Location Provider
LocationProvider passiveProvider =
		mLocationManager.getLastKnownLocation(LocationManager.PASSIVE_PROVIDER);
//  獲取gps Location Provider
LocationProvider gpsProvider =
                mLocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
//  獲取network Location Provider
LocationProvider passiveProvider = 
		mLocationManager. getLastKnownLocation (LocationManager.NETWORK_PROVIDER);

四、需要的許可權

<uses-permissionandroid:name="android.permission.ACCESS_FINE_LOCATION"/>

——————————————————————————————————

程式碼:

activity_main.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <TextView
        android:id="@+id/tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</RelativeLayout>

MainActivity.java:

package com.oak.learngpslocationdemo;

import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.widget.TextView;

public class MainActivity extends Activity {
	private TextView tv;//用於顯示資訊的TextView
	private LocationManager mLocationManager;//位置管理器
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        tv = (TextView) findViewById(R.id.tv);//獲取到TextView
        //獲取到位置管理器例項
        mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        //獲取到GPS_PROVIDER
        Location location = mLocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
        //偵聽位置發生變化,2000毫秒更新一次,位置超過8米也更新一次
        mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2000, 8, new LocationListener() {
			
			@Override
			public void onStatusChanged(String provider, int status, Bundle extras) {
				// TODO Auto-generated method stub
			}
			
			@Override
			public void onProviderEnabled(String provider) {
				// 當GPS Location Provider可用時,更新位置
				updata(mLocationManager.getLastKnownLocation(provider));
			}
			
			@Override
			public void onProviderDisabled(String provider) {
				// TODO Auto-generated method stub
				
			}
			@Override
			public void onLocationChanged(Location location) {
				// 當GPS定位資訊發生改變時,更新位置
				updata(location);
			}
		});
        //更新位置資訊顯示到TextView
        updata(location);
    }
    private void updata(Location location){
    		if(location != null){
	    		StringBuilder sb = new StringBuilder();
	    		sb.append("實時的位置資訊:\n");
				sb.append("經度:");
				sb.append(location.getLongitude());
				sb.append("\n緯度:");
				sb.append(location.getLatitude());
				sb.append("\b高度:");
				sb.append(location.getAltitude());
				sb.append("\n速度:");
				sb.append(location.getSpeed());
				sb.append("\n方向:");
				sb.append(location.getBearing());
				tv.setText(sb.toString());
    		}
    }
}


好啦,到這裡就結束了一個簡單的獲取位置的demo,還有距離計算和鄰近報警請看下篇部落格,不動的童鞋們可以留言給我哦,我會第一時間回覆的。

By:Brycen Liu