昨天提到的定位問題
其實有三大重點
一 向系統提取權限
二 向使用者要求權限
三 判斷GPS的使用方式 是使用GPS定位還是網路GPS定位
向系統提取權限
首先在AndroidManIfest.xml設定好
// android實體機上 高度精準GPS位置(不一定所有機型都支援 不支援就會改使用COARSE_LOCATION)
//android 實體機上 Internet 使用權 為何需要internet使用權 因為不是所有地方都有GPS訊號 在大樓內很容易就沒有GPS訊號 wifi網路訊號這時候就可以派上用場
android實體機上 低度精準GPS位置
向使用者要求權限
在提取系統位置之前 必須先向使用者確認使用者的意願 是否願意給程式提取實體機上系統的GPS訊號 這是在android 6.0以後的機型上提取危險性全縣的一大限制 也確保程式不會再使用者不同意的情況下竊取使用者的位置
使用方法
if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(arrayOf(Manifest.permission.ACCESS_FINE_LOCATION), 0)
}
完成後當你第一次使用提取GPS位址程式時 就會跳出
這時只要按下允許 之後就不會再出現 也就表示你同意給程式提取GPS位址
判斷GPS的使用方式 是使用GPS定位還是網路GPS定位
接下來我們要則們提取位址呢
首先我們做一個LocationManager物件 提取SystemService
透過這個LocationManager 提取系統中GPS 訊號位址與網路GPS訊號位址
但加入判斷
if (manager.isProviderEnabled(LocationManager.GPS_PROVIDER) || manager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
var self_gps: Location? = manager.getLastKnownLocation("gps")
if (self_gps != null) {
} else {
self_gps = manager.getLastKnownLocation("network")
}
怎麼判斷是實體GPS訊號還是網路GPS訊號
getLastKnownLocation()
內容可以夾入兩種字串"gps"/"network" 就可以代表所獲取的訊號為何
但是我們為何要寫這一大串的判斷式
這一大段的判斷式意思是
當從系統中取得實體GPS位址與網路GPS位址
當兩者都取得時 使用實體GPS位址
當兩者有一位能取得的時候 使用網路GPS位址
為什麼這樣寫 因為這是一個取決大部分能夠得到GPS位址的方法
唯一取不到位址的地方 是有實體GPS位址而沒有網路GPS位址
這樣會造成娶不到任何位址 不過通常我們會在外圍先寫上必須開放網路權限 這是必須的 因為讀取地圖也必須使用到網路權限
所以取得其一位址之後
GPS訊號分為經度(longitude)與緯度(latitude)
取得後把它分給latlon 這就是我們能用的GPS物件了
Kotlin 中雙!!為何需要查詢一下
我們能用之後 我們必須先做一個動作
就是我們必須把地圖的視角移到我的所在的GPS訊號上並且指定放大倍率
最後做一個標記給GPS訊號 給使用者明確指示
這樣就完成了基本地圖與定位的聯合應用
最後成果
糟糕 洩漏我的位址了
本來還想寫更多
但是在寫就超時了 鮮血到這裡吧 今天用了大絕 希望明天不會用到