Transcript GPS 與基地台定位
GPS 與 基地台定位
NTHU CS ISLAB 國立清華大學 資訊工程研究所 資訊安全實驗室
•
•
•
•
•
•
•
•
•
•
•
•
加入使用權限
Android 平台提供了兩種定位方式,其一是透過GPS,其二是透過基地台/wifi
來做三角定位。
GPS的準確度較高,但只能在戶外接收的到衛星訊號的地方使用。
基地台三角定位的準確度較低,但是在室內使用時依然能接收到定位結果。
在AndroidManifest.xml內
定義 ACCESS_FINE_LOCATION ,允許應用程式透過GPS做現在位置的定
位。
定義 ACCESS_COARSE_LOCATION,允許應用程式透過基地台/wifi做三角
定位。
定義 INTERNET 使用權限,則允許應用程式存取網路,好顯示地圖資料。
所以也可以只組合 ACCESS_FINE_LOCATION、INTERNET,強制應用程
式只能用GPS定位
方法:
打開 AndroidManifest.xml 清單。切換到 Permission 頁籤,按下 Add,在彈
出選擇框中選 User Permission。此時左側的Perssion列表上會增加一個項目
選擇這個項目,並在列表右側的下拉選單中選
ACCESS_COARSE_LOCATION。依同樣的步驟,新增另外兩個
Permission:ACCESS_FINE_LOCATION、INTERNET
也可以直接切換到 Android Manifest.xml,修改原始清單檔案
NTHU CS ISLAB 國立清華大學 資訊工程研究所 資訊安全實驗室
• 另外再配上Criteria criteria = new Criteria();
• criteria.setAccuracy(Criteria.ACCURACY_FINE);
//只允許GPS定位
• criteria.setAccuracy(Criteria.ACCURACY_COAR
SE);//只允許基地台/Wifi作定位
• 決定想要用哪種定位方式
NTHU CS ISLAB 國立清華大學 資訊工程研究所 資訊安全實驗室
NTHU CS ISLAB 國立清華大學 資訊工程研究所 資訊安全實驗室
NTHU CS ISLAB 國立清華大學 資訊工程研究所 資訊安全實驗室
NTHU CS ISLAB 國立清華大學 資訊工程研究所 資訊安全實驗室
加入使用權限
• 程式執行需要讀取到安全敏感項必需在androidmanifest.xml中聲明相
關權限請求,完整列表如下:
android.permission.ACCESS_CHECKIN_PROPERTIES允許讀寫訪
問"properties"表在checkin數據庫中,改值可以修改上傳( Allows
read/write access to the "properties" table in the checkin database,
to change values that get uploaded)
android.permission.ACCESS_COARSE_LOCATION允許一個程式
訪問CellID或WiFi熱點來獲取粗略的位置(Allows an application to
access coarse (eg, Cell-ID, WiFi) location)
android.permission.ACCESS_FINE_LOCATION允許一個程式訪問
精良位置(如GPS) (Allows an application to access fine (eg, GPS)
location)
android.permission.ACCESS_LOCATION_EXTRA_COMMANDS允
許應用程式訪問額外的位置提供命令(Allows an application to access
extra location provider commands)
android.permission.ACCESS_MOCK_LOCATION允許程式創建模擬
位置提供用於測試(Allows an application to create mock location
NTHU CS ISLAB 國立清華大學 資訊工程研究所 資訊安全實驗室
providers for testing)
加入使用權限
•
android.permission.ACCESS_NETWORK_STATE允許
程式訪問有關GSM網絡信息(Allows applications to
access information about networks)
android.permission.ACCESS_SURFACE_FLINGER允
許程式使用SurfaceFlinger底層特性(Allows an application
to use SurfaceFlinger's low level features)
android.permission.ACCESS_WIFI_STATE允許程式訪
問Wi-Fi網絡狀態信息(Allows applications to access
information about Wi-Fi networks)
NTHU CS ISLAB 國立清華大學 資訊工程研究所 資訊安全實驗室
加入使用權限
• android.permission.ADD_SYSTEM_SERVICE允許程式發布系統級
服務(Allows an application to publish system-level services).
android.permission.BATTERY_STATS允許程式更新手機電池統計信
息(Allows an application to update the collected battery statistics)
android.permission.BLUETOOTH允許程式連接到已配對的藍牙設備
(Allows applications to connect to paired bluetooth devices)
android.permission.BLUETOOTH_ADMIN允許程式發現和配對藍牙
設備(Allows applications to discover and pair bluetooth devices)
android.permission.BRICK請求能夠禁用設備(非常危險)(Required to
be able to disable the device (very dangerous!).)
NTHU CS ISLAB 國立清華大學 資訊工程研究所 資訊安全實驗室
加入使用權限
•
android.permission.BROADCAST_PACKAGE_REMOVED允許程式廣播一
個提示消息在一個應用程式包已經移除後(Allows an application to broadcast
a notification that an application package has been removed)
android.permission.BROADCAST_STICKY.允許一個程式廣播常用
intents(Allows an application to broadcast sticky intents)
android.permission.CALL_PHONE允許一個程式初始化一個電話撥號不需通
過撥號用戶界面需要用戶確認(Allows an application to initiate a phone call
without going through the Dialer user interface for the user to confirm the
call being placed.)
android.permission.CALL_PRIVILEGED允許一個程式撥打任何號碼,包含
緊急號碼無需通過撥號用戶界面需要用戶確認(Allows an application to call
any phone number, including emergency numbers, without going through
the Dialer user interface for the user to confirm the call being placed)
NTHU CS ISLAB 國立清華大學 資訊工程研究所 資訊安全實驗室
加入使用權限
•
android.permission.CAMERA請求訪問使用照相設備(Required to be able to
access the camera device. )
android.permission.CHANGE_COMPONENT_ENABLED_STATE允許一個
程式是否改變一個組件或其他的啟用或禁用(Allows an application to change
whether an application component (other than its own) is enabled or not. )
android.permission.CHANGE_CONFIGURATION允許一個程式修改當前設
置,如本地化(Allows an application to modify the current configuration,
such as locale. )
android.permission.CHANGE_NETWORK_STATE允許程式改變網絡連接狀
態(Allows applications to change network connectivity state)
android.permission.CHANGE_WIFI_STATE允許程式改變Wi-Fi連接狀態
(Allows applications to change Wi-Fi connectivity state)
NTHU CS ISLAB 國立清華大學 資訊工程研究所 資訊安全實驗室
加入使用權限
•
android.permission.CLEAR_APP_CACHE允許一個程式清楚緩存從所有安裝的程式在設備中
(Allows an application to clear the caches of all installed applications on the device. )
android.permission.CLEAR_APP_USER_DATA允許一個程式清除用戶設置(Allows an application
to clear user data)
android.permission.CONTROL_LOCATION_UPDATES允許啟用禁止位置更新提示從無線模塊
(Allows enabling/disabling location update notifications from the radio. )
android.permission.DELETE_CACHE_FILES允許程式刪除緩存文件(Allows an application to
delete cache files)
android.permission.DELETE_PACKAGES允許一個程式刪除包(Allows an application to delete
packages)
android.permission.DEVICE_POWER允許訪問底層電源管理(Allows low-level access to power
management)
android.permission.DIAGNOSTIC允許程式RW診斷資源(Allows applications to RW to diagnostic
resources. )
android.permission.DISABLE_KEYGUARD允許程式禁用鍵盤鎖(Allows applications to disable
the keyguard )
NTHU CS ISLAB 國立清華大學 資訊工程研究所 資訊安全實驗室
加入使用權限
•
android.permission.DUMP允許程式返回狀態抓取信息從系統服務(Allows an application to retrieve state dump
information from system services.)
android.permission.EXPAND_STATUS_BAR允許一個程式擴展收縮在狀態欄,Android開發網提示應該是一個類似
Windows Mobile中的托盤程式(Allows an application to expand or collapse the status bar. )
android.permission.FACTORY_TEST作為一個工廠測試程式,運行在root用戶(Run as a manufacturer test
application, running as the root user. )
android.permission.FLASHLIGHT訪問閃光燈,Android開發網提示HTC Dream不包含閃光燈(Allows access to the
flashlight )
android.permission.FORCE_BACK允許程式強行一個後退操作是否在頂層activities(Allows an application to force
a BACK operation on whatever is the top activity. )
android.permission.FOTA_UPDATE暫時不了解這是做什麼使用的,Android開發網分析可能是一個預留權限.
android.permission.GET_ACCOUNTS訪問一個帳戶列表在Accounts Service中(Allows access to the list of
accounts in the Accounts Service)
android.permission.GET_PACKAGE_SIZE允許一個程式獲取任何package佔用空間容量(Allows an application to
find out the space used by any package. )
android.permission.GET_TASKS允許一個程式獲取信息有關當前或最近運行的任務,一個縮略的任務狀態,是否
活動等等(Allows an application to get information about the currently or recently running tasks: a thumbnail
representation of the tasks , what activities are running in it, etc.)
NTHU CS ISLAB 國立清華大學 資訊工程研究所 資訊安全實驗室
加入使用權限
•
android.permission.HARDWARE_TEST允許訪問硬件(Allows access to hardware peripherals. )
android.permission.INJECT_EVENTS允許一個程式截獲用戶事件如按鍵、觸摸、軌跡球等等到一個時間流,Android開發網提醒算是hook
技術吧(Allows an application to inject user events (keys, touch, trackball) into the event stream and deliver them to ANY window.)
android.permission.INSTALL_PACKAGES允許一個程式安裝packages(Allows an application to install packages. )
android.permission.INTERNAL_SYSTEM_WINDOW允許打開窗口使用系統用戶界面(Allows an application to open windows that are for
use by parts of the system user interface. )
android.permission.INTERNET允許程式打開網絡套接字(Allows applications to open network sockets)
android.permission.MANAGE_APP_TOKENS允許程式管理(創建、催後、z-order默認向z軸推移)程式引用在窗口管理器中(Allows an
application to manage (create, destroy, Z-order) application tokens in the window manager. )
android.permission.MASTER_CLEAR目前還沒有明確的解釋,Android開發網分析可能是清除一切數據,類似硬格機
android.permission.MODIFY_AUDIO_SETTINGS允許程式修改全局音頻設置(Allows an application to modify global audio settings)
android.permission.MODIFY_PHONE_STATE允許修改話機狀態,如電源,人機接口等(Allows modification of the telephony state power on, mmi, etc. )
android.permission.MOUNT_UNMOUNT_FILESYSTEMS允許掛載和反掛載文件系統可移動存儲(Allows mounting and unmounting file
systems for removable storage. )
android.permission.PERSISTENT_ACTIVITY允許一個程式設置他的activities顯示(Allow an application to make its activities persistent. )
android.permission.PROCESS_OUTGOING_CALLS允許程式監視、修改有關播出電話(Allows an application to monitor, modify, or abort
outgoing calls)
NTHU CS ISLAB 國立清華大學 資訊工程研究所 資訊安全實驗室
加入使用權限
•
android.permission.READ_CALENDAR允許程式讀取用戶日曆數據(Allows an application to read the user's calendar data.)
android.permission.READ_CONTACTS允許程式讀取用戶聯繫人數據(Allows an application to read the user's contacts data.)
android.permission.READ_FRAME_BUFFER允許程式屏幕波或和更多常規的訪問幀緩衝數據(Allows an application to take screen shots
and more generally get access to the frame buffer data)
•
android.permission.READ_INPUT_STATE允許程式返回當前按鍵狀態(Allows an application to retrieve the current state of keys and
switches. )
android.permission.READ_LOGS允許程式讀取底層系統日誌文件(Allows an application to read the low-level system log files. )
android.permission.READ_OWNER_DATA允許程式讀取所有者數據(Allows an application to read the owner's data)
android.permission.READ_SMS允許程式讀取短信息(Allows an application to read SMS messages.)
android.permission.READ_SYNC_SETTINGS允許程式讀取同步設置(Allows applications to read the sync settings)
android.permission.READ_SYNC_STATS允許程式讀取同步狀態(Allows applications to read the sync stats)
android.permission.REBOOT請求能夠重新啟動設備(Required to be able to reboot the device. )
android.permission.RECEIVE_BOOT_COMPLETED允許一個程式接收到ACTION_BOOT_COMPLETED廣播在系統完成啟動(Allows an
application to receive the ACTION_BOOT_COMPLETED that is broadcast after the system finishes booting. )
android.permission.RECEIVE_MMS允許一個程式監控將收到MMS彩信,記錄或處理(Allows an application to monitor incoming MMS
messages, to record or perform processing on them. )
NTHU CS ISLAB 國立清華大學 資訊工程研究所 資訊安全實驗室
加入使用權限
•
android.permission.RECEIVE_SMS允許程式監控一個將收到短信息,記錄或處理(Allows an application to monitor incoming SMS
messages, to record or perform processing on them.)
android.permission.RECEIVE_WAP_PUSH允許程式監控將收到WAP PUSH信息(Allows an application to monitor incoming WAP push
messages. )
android.permission.RECORD_AUDIO允許程式錄製音頻(Allows an application to record audio)
android.permission.REORDER_TASKS允許程式改變Z軸排列任務(Allows an application to change the Z-order of tasks)
android.permission.RESTART_PACKAGES允許程式重新啟動其他程式(Allows an application to restart other applications)
android.permission.SEND_SMS允許程式發送SMS短信(Allows an application to send SMS messages)
android.permission.SET_ACTIVITY_WATCHER允許程式監控或控制activities已經啟動全局系統中Allows an application to watch and
control how activities are started globally in the system.
android.permission.SET_ALWAYS_FINISH允許程式控制是否活動間接完成在處於後台時Allows an application to control whether
activities are immediately finished when put in the background.
android.permission.SET_ANIMATION_SCALE修改全局信息比例(Modify the global animation scaling factor.)
android.permission.SET_DEBUG_APP配置一個程式用於調試(Configure an application for debugging.)
android.permission.SET_ORIENTATION允許底層訪問設置屏幕方向和實際旋轉(Allows low-level access to setting the orientation
(actually rotation) of the screen.)
android.permission.SET_PREFERRED_APPLICATIONS允許一個程式修改列表參數PackageManager.addPackageToPreferred()和
PackageManager.removePackageFromPreferred()方法(Allows an application to modify the list of preferred applications with the
PackageManager.addPackageToPreferred() and PackageManager.removePackageFromPreferred() methods.)
NTHU CS ISLAB 國立清華大學 資訊工程研究所 資訊安全實驗室
加入使用權限
•
android.permission.SET_PROCESS_FOREGROUND允許程式當前運行程式強行到前台(Allows an application to force any currently
running process to be in the foreground.)
android.permission.SET_PROCESS_LIMIT允許設置最大的運行進程數量(Allows an application to set the maximum number of (not
needed) application processes that can be running. )
android.permission.SET_TIME_ZONE允許程式設置時間區域(Allows applications to set the system time zone)
android.permission.SET_WALLPAPER允許程式設置壁紙(Allows applications to set the wallpaper )
android.permission.SET_WALLPAPER_HINTS允許程式設置壁紙hits(Allows applications to set the wallpaper hints)
android.permission.SIGNAL_PERSISTENT_PROCESSES允許程式請求發送信號到所有顯示的進程中(Allow an application to request
that a signal be sent to all persistent processes)
android.permission.STATUS_BAR允許程式打開、關閉或禁用狀態欄及圖標Allows an application to open, close, or disable the status bar
and its icons.
android.permission.SUBSCRIBED_FEEDS_READ允許一個程式訪問訂閱RSS Feed內容提供(Allows an application to allow access the
subscribed feeds ContentProvider. )
android.permission.SUBSCRIBED_FEEDS_WRITE系統暫時保留改設置,Android開發網認為未來版本會加入該功能。
android.permission.SYSTEM_ALERT_WINDOW允許一個程式打開窗口使用TYPE_SYSTEM_ALERT,顯示在其他所有程式的頂層
(Allows an application to open windows using the type TYPE_SYSTEM_ALERT, shown on top of all other applications. )
android.permission.VIBRATE允許訪問振動設備(Allows access to the vibrator)
NTHU CS ISLAB 國立清華大學 資訊工程研究所 資訊安全實驗室
加入使用權限
•
android.permission.WAKE_LOCK允許使用PowerManager的WakeLocks保持進程在休眠時從屏幕消失( Allows
using PowerManager WakeLocks to keep processor from sleeping or screen from dimming)
android.permission.WRITE_APN_SETTINGS允許程式寫入API設置(Allows applications to write the apn settings)
android.permission.WRITE_CALENDAR允許一個程式寫入但不讀取用戶日曆數據(Allows an application to write
(but not read) the user‘s calendar data. )
android.permission.WRITE_CONTACTS允許程式寫入但不讀取用戶聯繫人數據(Allows an application to write (but
not read) the user’s contacts data. )
android.permission.WRITE_GSERVICES允許程式修改Google服務地圖(Allows an application to modify the
Google service map. )
android.permission.WRITE_OWNER_DATA允許一個程式寫入但不讀取所有者數據(Allows an application to write
(but not read) the owner‘s data.)
android.permission.WRITE_SETTINGS允許程式讀取或寫入系統設置(Allows an application to read or write the
system settings. )
android.permission.WRITE_SMS允許程式寫短信(Allows an application to write SMS messages)
android.permission.WRITE_SYNC_SETTINGS允許程式寫入同步設置(Allows applications to write the sync
settings)
我們看到Android平台上的權限許可分得還是很細,和Symbian S60 3rd的Capabilities比詳細的多,如果程式無法正
常執行時看看是不是缺少相關的permission聲明,最終我們還需要使用android sign tools簽名生成的apk文件
NTHU CS ISLAB 國立清華大學 資訊工程研究所 資訊安全實驗室
定義LocationListener介面
•
package com.demo.android.mylocation;
•
•
•
•
import android.app.Activity;
import android.os.Bundle;
import android.location.Location;
import android.location.LocationListener;
•
•
•
•
•
•
•
•
•
public class MyLocation extends Activity implements LocationListener{
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
直接在Activity中實做「LocationListener」介面,省下建立一個新的「Listener」物件
,節省記憶體
NTHU CS ISLAB 國立清華大學 資訊工程研究所 資訊安全實驗室
NTHU CS ISLAB 國立清華大學 資訊工程研究所 資訊安全實驗室
定義LocationListener介面
•
•
@Override
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
•
•
•
•
•
•
•
•
•
•
•
•
•
} //每當地點改變的時候,都會呼叫這個方法。利用傳入的「location」(地點)參數,來
改變程式的行為
@Override
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
} //當使用者將GPS或基地台定位功能關閉的時候,會呼叫到的方法
@Override
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
} //當使用者將GPS或基地台定位功能關閉的時候,會呼叫到的方法
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub
} //當GPS或手機定位狀態改變時,會呼叫到的方法
NTHU CS ISLAB 國立清華大學 資訊工程研究所 資訊安全實驗室
使用LocationManager來取得現在位
置
•
•
•
•
•
•
•
•
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
updateStat();}
private LocationManager mgr;
private String provider;
private void updateStat(){
mgr = (LocationManager)
getSystemService(LOCATION_SERVICE);
– Parameters name The name of the desired service.
– Returns The service or null if the name does not exist.
NTHU CS ISLAB 國立清華大學 資訊工程研究所 資訊安全實驗室
• Currently available names are:
–
–
–
–
–
–
–
–
–
–
–
–
WINDOW_SERVICE
ACTIVITY_SERVICE
POWER_SERVICE
ALARM_SERVICE
NOTIFICATION_SERVICE
KEYGUARD_SERVICE
LOCATION_SERVICE
SEARCH_SERVICE
VIBRATOR_SERVICE
CONNECTIVITY_SERVICE
WIFI_SERVICE
INPUT_METHOD_SERVICE
NTHU CS ISLAB 國立清華大學 資訊工程研究所 資訊安全實驗室
自動判斷最佳定位服務
•
Criteria criteria = new Criteria();
–
class indicating the application criteria for selecting a location provider.
•
•
•
•
•
•
criteria.setAccuracy(Criteria.ACCURACY_FINE);
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);//提供者是否需傳回相對位置
criteria.setCostAllowed(true);
criteria.setPowerRequirement(Criteria.POWER_LOW);
criteria.setSpeedRequired(false);
•
best = mgr.getBestProvider(criteria, true);
– Parameters
• criteria the criteria that need to be matched
• enabledOnly if true then only a provider that is currently enabled is
returned
– Returns
• name of the provider that best matches the requirements
NTHU CS ISLAB 國立清華大學 資訊工程研究所 資訊安全實驗室
• Location location =
mgr.getLastKnownLocation(best);
– Parameters
• provider the name of the provider
– Returns
• the last known location for the provider, or null
NTHU CS ISLAB 國立清華大學 資訊工程研究所 資訊安全實驗室
取得可用的定位服務提供者列表
• List<String> providers =
LocationManager.getProviders(criteria, false);
NTHU CS ISLAB 國立清華大學 資訊工程研究所 資訊安全實驗室
• // pop up
• StringBuffer msg = new StringBuffer();
• msg.append("Latitude:");
msg.append(Double.toString(location.getLati
tude()));
• msg.append(", Longitude:");
• msg.append(Double.toString(location.getLon
gitude()));
• Toast.makeText(this,
msg,Toast.LENGTH_LONG).show();}
NTHU CS ISLAB 國立清華大學 資訊工程研究所 資訊安全實驗室
• Java提供了兩個class作為操作字串之用,分別為String和StringBuffer
。String當設定了初始值之後,就不能再改變,且長度固定,因此,
如果要處理一個需要時常變更內容的字串時,直接利用String物件會
比較不適合。因為每次變更字串內容時,系統都會產生新的String物
件,並且必須對舊的String物件作資源回收的工作。這樣的作法會影
響系統的效能。
• StringBuffer如果建構時沒有參數,系統會給它一個capacity=16的空
間,當放入的字串太大時,系統會自動加大capacity。運算中如果程
式透過setLength修改StringBuffer的長度,當設定的長度小於原字串
長度時,原字串多餘的會被切除,當設定的長度大於原字串長度時,
後面的每個字元會是null。StringBuffer除了可以接字串外,也可以接
其它型別,如boolean、char、char[]、double…等,甚至Object也可
以! 不管是接什麼型別,StringBuffer都會將它轉成字串。
NTHU CS ISLAB 國立清華大學 資訊工程研究所 資訊安全實驗室
方法
功用
StringBuffer append(Object
obj)
Int capacity()
StringBuffer delete(int
start,int end)
StringBuffer deleteAt(int
index)
StringBuffer insert(int
offset,Object obj)
StringBuffer reverse()
將obj物件增加到StringBuffer
物件的緩衝區後
將obj物件增加到StringBuffer
物件的緩衝區後
將obj物件增加到StringBuffer
物件的緩衝區後
移除緩衝區中的index位置的
字元
將obj物件加入StringBuffer物
件中的offset位置之後
將緩衝區中的字串反向排列
NTHU CS ISLAB 國立清華大學 資訊工程研究所 資訊安全實驗室
• public static Toast makeText (Context context,
CharSequence text, int duration)
• Make a standard toast that just contains a text
view.
– Parameters
– context The context to use. Usually your Application
or Activity object.
– text The text to show. Can be formatted text.
– duration How long to display the message. Either
LENGTH_SHORT or LENGTH_LONG
NTHU CS ISLAB 國立清華大學 資訊工程研究所 資訊安全實驗室
• @Override
• protected void onResume(){ super.onResume();
• mgr.requestLocationUpdates(best, 60000, 1, this);}
– public void requestLocationUpdates (String provider, long minTime,
float minDistance, LocationListener listener)
– Parameters
– provider the name of the provider with which to register
– minTime the minimum time interval for notifications, in milliseconds.
This field is only used as a hint to conserve power, and actual time
between location updates may be greater or lesser than this value.
– minDistance the minimum distance interval for notifications, in meters
– listener a {#link LocationListener} whose onLocationChanged(Location)
method will be called for each location update
NTHU CS ISLAB 國立清華大學 資訊工程研究所 資訊安全實驗室
•
•
•
•
@Override
protected void onPause(){
super.onPause();
mgr.removeUpdates(this); }
– public void removeUpdates (LocationListener listener)
– Removes any current registration for location updates of the
current activity with the given LocationListener. Following this
call, updates will no longer occur for this listener.
– Parameters
– listener {#link LocationListener} object that no longer needs
location updates
NTHU CS ISLAB 國立清華大學 資訊工程研究所 資訊安全實驗室