1. 程式人生 > >Android筆記三十二.Android位置服務及核心API

Android筆記三十二.Android位置服務及核心API

一、位置服務概念 1.位置服務     位置服務(Location-Based Services,LBS),又稱定位服務或基於位置的服務,融合了GPS定位、行動通訊、導航等多種技術,提供了與個空間位置相關的綜合應用服務。 2.GPS與網路位置提供器     Android平臺支援提供位置服務的API,可以利用GPS(Global Positioning System,全球定位系統)和Network Location Provider(網路位置提供器)來獲得使用者的位置。     (1)GPS相對來說更精確,但它只能在戶外工作,很費電,並且不能像使用者期望的那樣立即就能返回位置資訊;     (2)Android的網路位置提供器使用手機發射塔和WI-FI訊號來判斷使用者位置
,在室內外都能工作、響應速度快、並且更加省點。如果想在應用程式中獲得使用者的位置,可以同時使用GPS和網路位置提供器,或者其中一種。通過定位服務可以獲得當前裝置的地理位置,應用程式可以定時請求更新裝置當前的地理定位資訊,從而達到實時監測的功能。
3.基本框架
二、提供位置服務的核心API     Android為支援位置服務,提供了android.location包,該包中包含了與位置資訊密切相關的了和介面,主要有:LocationManager、LocationProvider、Location、LocationListener 1.LocationManager (1)功能 定位管理者
。該類是訪問Android系統位置服務的入口,所有定位相關的服務、物件都將由該類的物件來產生和其他服務一樣,程式不能直接建立LocationManager物件,而是通過Context的getSystemService()方法來獲取物件:
LocationManager locMg=getSystemService(Context.LOCATION_SERVICE); (2)LocationManager中的常用方法  public String getBestProvider(Criteria criteria,boolean enabledOnly):根據指定條件返回最優的LocationProvider
。其中criteria表示過濾條件,enabledOnly表示是否要求處於啟用狀態。  
public Location getLastKnowLocation(String provider):根據LocationProvider獲取最近一次已經的Location物件。其中provider表示提供上次位置的LocationProvider名稱。
 public LocationProvider getProvider(String name):根據名稱返回LocationProvider物件。
 public List<String> getProviders(boolean enabledOnly):獲取所有可用的LocationProvaider。
 public voidrequestLocationUpdates(String provider,long minTime,float minDistance,LocationListener listener):通過指定的LocationProvider週期性地獲取定位資訊,並觸發listener所對應的觸發器。
 public void addProximityAlert(double latitude,double longitude,float radius,long expiration,PendingIntent intent):新增一個臨近警告。即不斷監聽手機的位置,當手機與固定點的距離小於指定範圍時,系統將會觸發相應事件,進行處理。其中,latitude指定中心點的經度,longitude指定中心點的緯度,指定一個半徑長度,expiration指定經過多少毫秒後該臨近警告就會過期失效(-1指定永不過期),intent指定臨近該固定點時觸發該intent對應的元件。
 public void requestLocationUpdates(String provider,long minTime,float minDistance,PendingIntent intent):通過指定的LocationProvider週期性地獲取定位資訊,並通過intent啟動相應的元件進行事件處理,provider表示LocationProvider的名稱,minTime表示每次更新的時間間隔,單位為毫秒,minDistance表示更新的最近位置,單位為米,intent每次更新時啟動的元件。
public void requestLocationUpdates (String provider, long minTime, float minDistance, LocationListener listener)  :通過指定的LocationProvider週期性地獲取定位資訊,當位置資訊變化時回撥LocationListener監聽器的onLocationChanged(Location location)方法。其中,minTime為多少時間間隔更新一下位置資訊;minDistance為多少距離間隔更新一下位置資訊。 2.LocationProvider類 (1)功能     定位提供者。該類是對定位元件的抽象表示,用來提供定位資訊,能夠週期性的報告裝置的地理位置,Android中支援多種LocationProvider,它們以不同的技術提供裝置的當前位置,區別在於定位的精度、速度和成本等方面。 (2)常用LocationProvider種類 network:由LocationManager.NETWORK_PROVIDER常量表示,代表通過網路獲取定位資訊的                         Location Provider物件; gps:由LocationManager.GPS_PROVIDER常量表示,代表通過GPS獲取定位資訊的               LocationProvider物件。 (3)LocationProvider中的常用方法 int getAccuracy():返回該LocationProvider的精度;
int getPowerRequirement():返回LocationProvider對電量的要求;
String getName():返回該LocationProvider的名稱;
boolean hasMonetaryCost():判斷該LocationProvider是否支援方向資訊;
boolean supportsSpeed():判斷該LocationProvider是否支援速度資訊。
3.Location類 功能:該類代表位置資訊的抽象類,通過Location可獲取定位資訊的精度、高度、方向、緯度、經度、速度以及改位置的LocationProvider等資訊。 4.LocationListener介面 (1)功能     該介面用於監聽定位資訊的監聽器,必須在定位管理器中註冊該物件,這樣在位置發生變化的時候就會觸發相應的方法進行事件處理。 (2)常用方法 public abstract void onLacationChanged(Location location):位置發生改變時回撥該方法;
public abstract void onProviderDisabled(String provider):Provider禁止時回撥該方法;
public abstract void onProviderEnabled(String provider):Provider啟動時回撥該方法;
public abstract void onStatusChanged(String provider,int status,Bundle extras):當Provider狀態發生變化時回撥該方法。
三、獲取位置資訊的一般步驟 1.通過位置服務獲取系統的LocationManager物件; 2.使用LocationManager,通過指定LocationProvider來獲取Location物件表示定位資訊; 3.Location物件中獲取位置資訊 4.呼叫LocationManager的requestLocationUpdates方法獲取實時位置資訊 示例:
  1. LocationManager locmgr=(LocationManager) getSystemService(Context.LOCATION_SERVICE);  
  2. Location loc=locmgr.getLastKnownLocation(LocationManager.GPS_PROVIDER);  
  3. double longitudeValue=loc.getLongitude();  
  4.  locmgr.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10008new LocationListener()   
  5. {  
  6.         ........  
  7.        public void onLocationChanged(Location location) {  
  8.         showInfo( location);    //當位置資訊發生變化時,回撥該方法  
  9.        }  
  10.   });  
四、原始碼實戰 1.功能:(1)實時獲取位置的經度與緯度資訊;(2)設定指定區域警示:當進入指定範圍後提示"您已經進入廣州";離開指定範圍後提示"您已離開廣州"。
2.原始碼 (1)src/../LocationTest.java     a.獲取LocationManager位置管理器物件;通過該物件指定LocationProvider來獲取Location物件;     b.呼叫Location中的方法獲取Location物件表示的位置資訊;     c.呼叫LocationManager的requestLocationUpdates方法實時更新顯示的位置資訊;     d.呼叫LocationManager的addProximityAlert方法設定靠近警示,併發送一個廣播給指定的廣播接收器;
  1. package com.example.mylocation;    
  2. import android.app.Activity;   
  3. import android.app.PendingIntent;  
  4. import android.content.Context;  
  5. import android.content.Intent;  
  6. import android.location.Location;  
  7. import android.location.LocationListener;  
  8. import android.location.LocationManager;  
  9. import android.os.Bundle;  
  10. import android.widget.TextView;  
  11. public class LocationTest extends Activity {  
  12.  private TextView location;  
  13.  private LocationManager locmgr;  
  14.  private Location loc;  
  15.     protected void onCreate(Bundle savedInstanceState) {  
  16.         super.onCreate(savedInstanceState);  
  17.         setContentView(R.layout.main);  
  18.         location = (TextView)findViewById(R.id.location);  
  19.         //1.獲取LocationManager管理器(物件)  
  20.         locmgr=(LocationManager) getSystemService(Context.LOCATION_SERVICE);  
  21.        //2.使用Locationmanager,通過指定LocationProvider來獲取Location物件,表示定位資訊;  
  22.         loc=locmgr.getLastKnownLocation(LocationManager.GPS_PROVIDER);  
  23.         //3.從Location表示的定位資訊中獲取定位細節並更新  
  24.         showInfo(loc);  
  25.         locmgr.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10008new LocationListener() {  
  26.    public void onStatusChanged(String provider, int status, Bundle extras) {  
  27.    }  
  28.    public void onProviderEnabled(String provider) {  
  29.    }  
  30.    public void onProviderDisabled(String provider) {  
  31.    }  
  32.    public void onLocationChanged(Location location) {  
  33.     showInfo( location);    //當位置資訊發生變化時,回撥該方法  
  34.    }  
  35.   });  
  36.         //4.靠近區域警示  
  37.         double latitude=34.232434;  
  38.         double longitude=123.0110223;  
  39.         int radius=5000;  
  40.         Intent intent=new Intent("com.jiangdongguo.broadcast");  
  41.         PendingIntent pi = PendingIntent.getBroadcast(this, -1, intent, 0); //傳送一個廣播到指定接收器  
  42.         locmgr.addProximityAlert(latitude, longitude, radius, -1, pi);         //設定指定範圍警告  
  43.     }  
  44.     public void showInfo(Location loc)  
  45.     {  
  46.      String err="未獲取到位置資訊.";  
  47.      if(loc!=null)  
  48.      {  
  49.       StringBuffer sb = new StringBuffer();  //可變字串快取  
  50.       sb.append("經度:"+loc.getLongitude()+"\n");  
  51.       sb.append("緯度:"+loc.getLatitude());  
  52.       location.setText(sb.toString());  
  53.      }  
  54.      else  
  55.      {  
  56.       System.out.println(err);  
  57.      }  
  58.     }  
  59. }
(2)src/.../AlertBroadcast.java 功能:廣播接收器子類,用於響應傳送過來的廣播,並根據intent傳過來的資訊作出響應。
  1. package com.example.mylocation;  
  2. import android.content.BroadcastReceiver;  
  3. import android.content.Context;  
  4. import android.content.Intent;  
  5. import android.location.LocationManager;  
  6. import android.widget.Toast;  
  7. public class AlertBroadcast extends BroadcastReceiver {  
  8.  public void onReceive(Context context, Intent intent) {  
  9.    //獲取intent傳遞過來的資訊,判斷是否進入(預設為false)  
  10.    Boolean flag = intent.getBooleanExtra(LocationManager.KEY_PROXIMITY_ENTERING, false);  
  11.    String result="";  
  12.    if(flag)  
  13.    {  
  14.     result="您已經進入廣州!";  
  15.    }  
  16.    else  
  17.    {  
  18.     result="您已離開廣州!";  
  19.    }  
  20.    Toast.makeText(context, result, Toast.LENGTH_SHORT).show();  
  21.  }  
效果演示

相關推薦

Android筆記.Android位置服務核心API

一、位置服務概念 1.位置服務     位置服務(Location-Based Services,LBS),又稱定位服務或基於位置的服務,融合了GPS定位、行動通訊、導航等多種技術,提供了與個空間位置

Android筆記四.Service綜合實例

com err out 生成 lds fcm con .so ron 綜合實例2:client訪問遠程Service服務 實現:通過一個button來獲取遠程Service的狀態,並顯示在兩個文本框中。 思路:如果A應用須要與B應用進行通信,調用B應用中

Android筆記四.Service綜合例項

綜合例項2:客戶端訪問遠端Service服務 實現:通過一個按鈕來獲取遠端Service的狀態,並顯示在兩個文字框中。 思路:假設A應用需要與B應用進行通訊,呼叫B應用中的getName()、ge

opencv學習筆記:Haar特徵與積分影象

一、 Haar特徵定義         Haar特徵是基於“塊”的特徵,也被稱為矩形特徵。Haar特徵(模板)分為三類:邊緣特徵、線性特徵、中心特徵和對角線特徵。特徵模板內有白色和黑色兩種矩形,並定義該模板的特徵值為白色矩形畫素和減去黑色矩形畫素和。Haar特徵值反映了影象

opencv筆記(影象矩moments,輪廓面積contourArea,輪廓周長arcLength)

理論來自: 1.概述 影象識別的一個核心問題是影象的特徵提取,簡單描述即為用一組簡單的資料(資料描述量)來描述整個影象,這組資料月簡單越有代表性越好。良好的特徵不受光線、噪點、幾何形變的干擾,影象識別技術的發展中,不斷有新的描述影象特徵提出,而影象不變矩就是其

GoLang學習筆記)匿名函式回撥用法

Go語言支援匿名函式,即在需要使用函式時,再定義函式。 匿名函式沒有函式名,只有函式體,函式可以被作為一種型別被賦值給變數,匿名函式也往往以變數的方式被傳遞。 匿名函式經常被用於實現回撥函式、閉包等。 定義格式: func(引數列表)(返回引數列表){    //函式體 }

Android開發筆記(一百)向量圖形與向量動畫

向量圖形VectorDrawable 與水波圖形RippleDrawable一樣,向量圖形VectorDrawable也是Android5.0之後新增的圖形類。向量圖不同於一般的圖形,它是由一系列幾何曲線構成的影象,這些曲線以數學上定義的座標點連線而成。具體到實現上,則需開

Android 學習之《第一行程式碼》第二版 筆記)詳解廣播機制(

廣播的最佳實踐——實現強制下線功能 思路:在介面上彈出一個對話方塊,讓使用者無法進行任何操作,必須點選對話方塊中的確定按鈕,然後回到登入介面即可。 一、效果圖 1. 登入介面並輸入賬號密碼 2. 登陸後的介面 3. 強制下線 4. 退回登陸的介面

Pro Android學習筆記) 瞭解Intent(下)

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Android開發學習筆記)基礎UI控制元件之ImageView、CheckBox、RadioButton

一、ImageView:直接繼承自View,它的作用是在介面上顯示Drawable物件。 ImageView在佈局檔案(如main_activity.xml)中常用的屬性 有 scaleType ,s

Android問題集錦之 Failure INSTALL FAILED NO MATCHING ABIS

                     這個問題出現在模擬器上的概率更大些,原因是某些應用使用了原生庫(NDK,Native Lib),這些庫的編譯目標通常是arm架構的cpu,在x86上執行就會報這樣的錯誤。 比如我看了一下報錯的應用,果然有很多so在lib下。$ ls lib/armeabi/libap

Android學習筆記六:android之socket程式設計例項

注意點:註冊訪問的網路許可權;android中UI執行緒不能有訪問網路的操作,否則會報android.os.NetworkOnMainThreadException的異常 <uses-permission android:name="

Android多媒體學習Android中Video的種播放方式的實現

在Android中,我們有三種方式來實現視訊的播放。 1、使用其自帶的播放器。指定Action為ACTION_VIEW,Data為Uri,Type為其MIME型別。 2、使用VideoView來播放。在佈局檔案中使用VideoView結合MediaController來實

Androin學習筆記:Java android Socket通訊檢測(server)連線是否斷開

Pre 在利用socket寫通訊程式的時候,想檢測伺服器是否還活著。 從網上找了很多資料,都沒有自己合適的,最後自己想了個辦法,不過也相當於截取了心跳檢測的一部分。 這裡檢測的是遠端server的連線,而不是本地是否連線成功。首先想到socket類的方法isClosed()、isConnected

Android的SeekBar和RateBar的使用-android學習之旅(

SeekBar簡介 SeekBar允許使用者拖動,進行調節經常用於音量調節等方面。 android:thumb設定drawable物件來表示拖動的物體。 setOnSeekBarChangeLis

Android學習筆記八:Android4.0 Socket異常,需要另外開闢執行緒進行Socket程式設計

Socket socket = new Socket(); socket.connect(new InetSocketAddress(ConstData.TCP_IP,                     ConstData.TCP_PORT), 2000); 通

Android群英傳讀書筆記——第章:Android 5.X新特性詳解

第十二章目錄 12.1 Android5.X UI設計初步  12.1.1 材料的形態模擬 12.1.2 更加真實的動畫 12.1.3 大色塊的使用 12.2 Material Design主題 12.3 Palette 12.4 檢視與陰影 12

Android筆記十三.BroadcastReceiver使用

mod 調用 raw ras ive ceo () 廣泛 全部 廣播是一種廣泛運用在應用程序之間傳輸信息的機制,而BroadcastReceiver是對發送出來的廣播進行過濾接收並響應的一類組件。BroadcastReceiver本質上是一種全局監聽器。用於監聽

Linux筆記) - 服務管理

查詢 xinetd服務 管理 yum安裝 linux筆記 默認安裝 定位 配置文件 sta (1)服務的分類1.rpm包默認安裝的服務 a.獨立的服務 b.基於xinetd服務2.源碼包的服務查詢已安裝的服務1.rpm包安裝的服務 查看服務(0-6運行級別下的)自啟動狀態,

《Qt5 開發與實例(第版)》學習筆記

action spa 添加 png esb geb itl msgbox setw 1 // 4.2 Qt5 自定義對話框 2 #include <QMessageBox> 3 4 void Dialog::showCustomMsgBox() 5