安卓獲取當(dāng)前地理位置(集成百度地圖)

百度地圖定位優(yōu)缺點:

  • 優(yōu)點:
    定位比較快
  • 缺點:
    含有so庫,定位不太準(zhǔn)

集成方法

  1. 從百度官方sdk中拷貝庫到工程中,下載地址
  2. 修改build.gradle文件
android {
    sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
    }
}

dependencies {
    implementation files('libs/BaiduLBS_Android.jar')
    implementation 'com.afollestad:assent:2.3.1'
}
  1. 修改manifest文件
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.cxyzy.demo">

    <!-- 這個權(quán)限用于進(jìn)行網(wǎng)絡(luò)定位-->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <!-- 這個權(quán)限用于訪問GPS定位-->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <!-- 用于訪問wifi網(wǎng)絡(luò)信息而涉,wifi信息會用于進(jìn)行網(wǎng)絡(luò)定位-->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <!-- 獲取運營商信息忆首,用于支持提供運營商信息相關(guān)的接口-->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <!-- 這個權(quán)限用于獲取wifi的獲取權(quán)限,wifi信息會用來進(jìn)行網(wǎng)絡(luò)定位-->
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <!-- 寫入擴(kuò)展存儲零远,向擴(kuò)展卡寫入數(shù)據(jù),用于寫入離線定位數(shù)據(jù)-->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <!-- 訪問網(wǎng)絡(luò),網(wǎng)絡(luò)定位需要上網(wǎng)-->
    <uses-permission android:name="android.permission.INTERNET" />

    <application
        android:allowBackup="false"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
        tools:ignore="GoogleAppIndexingWarning">
        <meta-data
            android:name="com.baidu.lbsapi.API_KEY"
            android:value="自己申請百度apk key" />
        <!-- 定位需要的服務(wù) -->
        <service
            android:name="com.baidu.location.f"
            android:enabled="true"
            android:process=":remote" />
    </application>

</manifest>
  1. 調(diào)用
class MainActivity : AppCompatActivity() {
    private lateinit var mLocationClient: LocationClient
    private val myListener = MyLocationListener()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        initMap()
        locateBtn.setOnClickListener { locate() }
    }

    private fun initMap() {
        mLocationClient = LocationClient(applicationContext)
        //聲明LocationClient類
        mLocationClient.registerLocationListener(myListener)
        val option = LocationClientOption()

        //可選,是否需要地址信息直撤,默認(rèn)為不需要,即參數(shù)為false
        //如果開發(fā)者需要獲得當(dāng)前點的地址信息蜕着,此處必須為true
        option.setIsNeedAddress(true)

        //mLocationClient為第二步初始化過的LocationClient對象
        //需將配置好的LocationClientOption對象谋竖,通過setLocOption方法傳遞給LocationClient對象使用
        //更多LocationClientOption的配置红柱,請參照類參考中LocationClientOption類的詳細(xì)說明
        mLocationClient.locOption = option

    }

    private fun locate() {
        locationTv.text = ""
        runWithPermissions(Permission.ACCESS_FINE_LOCATION) {
            progressBar.visibility = VISIBLE
            mLocationClient.start()
        }

    }

    inner class MyLocationListener : BDAbstractLocationListener() {
        override fun onReceiveLocation(location: BDLocation) {
            progressBar.visibility = GONE
            locationTv.text = getLocationStr(location)
        }
    }
}
object Utils {

    /**
     * 根據(jù)定位結(jié)果返回定位信息的字符串
     */
    fun getLocationStr(location: BDLocation): String? {
        val sb = StringBuffer()
        sb.append("time : ")
        /**
         * 時間也可以使用systemClock.elapsedRealtime()方法 獲取的是自從開機(jī)以來,每次回調(diào)的時間蓖乘;
         * location.getTime() 是指服務(wù)端出本次結(jié)果的時間锤悄,如果位置不發(fā)生變化,則時間不變
         */
        sb.append(location.time)
        sb.append("\nlocType : ")// 定位類型
        sb.append(location.locType)
        sb.append("\nlocType description : ")// *****對應(yīng)的定位類型說明*****
        sb.append(location.locTypeDescription)
        sb.append("\nlatitude : ")// 緯度
        sb.append(location.latitude)
        sb.append("\nlontitude : ")// 經(jīng)度
        sb.append(location.longitude)
        sb.append("\nradius : ")// 半徑
        sb.append(location.radius)
        sb.append("\nCountryCode : ")// 國家碼
        sb.append(location.countryCode)
        sb.append("\nCountry : ")// 國家名稱
        sb.append(location.country)
        sb.append("\ncitycode : ")// 城市編碼
        sb.append(location.cityCode)
        sb.append("\ncity : ")// 城市
        sb.append(location.city)
        sb.append("\nDistrict : ")// 區(qū)
        sb.append(location.district)
        sb.append("\nStreet : ")// 街道
        sb.append(location.street)
        sb.append("\naddr : ")// 地址信息
        sb.append(location.addrStr)
        sb.append("\nUserIndoorState: ")// *****返回用戶室內(nèi)外判斷結(jié)果*****
        sb.append(location.userIndoorState)
        sb.append("\nDirection(not all devices have value): ")
        sb.append(location.direction)// 方向
        sb.append("\nlocationdescribe: ")
        sb.append(location.locationDescribe)// 位置語義化信息
        sb.append("\nPoi: ")// POI信息
        if (location.poiList != null && !location.poiList.isEmpty()) {
            for (i in 0 until location.poiList.size) {
                val poi = location.poiList[i] as Poi
                sb.append(poi.name + ";")
            }
        }
        if (location.locType == BDLocation.TypeGpsLocation) {// GPS定位結(jié)果
            sb.append("\nspeed : ")
            sb.append(location.speed)// 速度 單位:km/h
            sb.append("\nsatellite : ")
            sb.append(location.satelliteNumber)// 衛(wèi)星數(shù)目
            sb.append("\nheight : ")
            sb.append(location.altitude)// 海拔高度 單位:米
            sb.append("\ngps status : ")
            sb.append(location.gpsAccuracyStatus)// *****gps質(zhì)量判斷*****
            sb.append("\ndescribe : ")
            sb.append("gps定位成功")
        } else if (location.locType == BDLocation.TypeNetWorkLocation) {// 網(wǎng)絡(luò)定位結(jié)果
            // 運營商信息
            if (location.hasAltitude()) {// *****如果有海拔高度*****
                sb.append("\nheight : ")
                sb.append(location.altitude)// 單位:米
            }
            sb.append("\noperationers : ")// 運營商信息
            sb.append(location.operators)
            sb.append("\ndescribe : ")
            sb.append("網(wǎng)絡(luò)定位成功")
        } else if (location.locType == BDLocation.TypeOffLineLocation) {// 離線定位結(jié)果
            sb.append("\ndescribe : ")
            sb.append("離線定位成功嘉抒,離線定位結(jié)果也是有效的")
        } else if (location.locType == BDLocation.TypeServerError) {
            sb.append("\ndescribe : ")
            sb.append("服務(wù)端網(wǎng)絡(luò)定位失敗零聚,可以反饋IMEI號和大體定位時間到loc-bugs@baidu.com,會有人追查原因")
        } else if (location.locType == BDLocation.TypeNetWorkException) {
            sb.append("\ndescribe : ")
            sb.append("網(wǎng)絡(luò)不同導(dǎo)致定位失敗些侍,請檢查網(wǎng)絡(luò)是否通暢")
        } else if (location.locType == BDLocation.TypeCriteriaException) {
            sb.append("\ndescribe : ")
            sb.append("無法獲取有效定位依據(jù)導(dǎo)致定位失敗隶症,一般是由于手機(jī)的原因,處于飛行模式下一般會造成這種結(jié)果岗宣,可以試著重啟手機(jī)")
        }
         return sb.toString()
    }

}

完整源代碼

https://gitee.com/cxyzy1/geolocationDemo/tree/master/baiduDemo

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蚂会,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子耗式,更是在濱河造成了極大的恐慌胁住,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件刊咳,死亡現(xiàn)場離奇詭異彪见,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)娱挨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進(jìn)店門余指,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人跷坝,你說我怎么就攤上這事浪规。” “怎么了探孝?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長誉裆。 經(jīng)常有香客問我顿颅,道長,這世上最難降的妖魔是什么足丢? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任粱腻,我火速辦了婚禮,結(jié)果婚禮上斩跌,老公的妹妹穿的比我還像新娘绍些。我一直安慰自己,他們只是感情好耀鸦,可當(dāng)我...
    茶點故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布柬批。 她就那樣靜靜地躺著啸澡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪氮帐。 梳的紋絲不亂的頭發(fā)上嗅虏,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天,我揣著相機(jī)與錄音上沐,去河邊找鬼皮服。 笑死,一個胖子當(dāng)著我的面吹牛参咙,可吹牛的內(nèi)容都是我干的龄广。 我是一名探鬼主播,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼蕴侧,長吁一口氣:“原來是場噩夢啊……” “哼择同!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起戈盈,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤奠衔,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后塘娶,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體归斤,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年刁岸,在試婚紗的時候發(fā)現(xiàn)自己被綠了脏里。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡虹曙,死狀恐怖迫横,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情酝碳,我是刑警寧澤矾踱,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站疏哗,受9級特大地震影響呛讲,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜返奉,卻給世界環(huán)境...
    茶點故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一贝搁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧芽偏,春花似錦雷逆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽往产。三九已至,卻和暖如春等太,著一層夾襖步出監(jiān)牢的瞬間捂齐,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工缩抡, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留奠宜,地道東北人。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓瞻想,卻偏偏與公主長得像压真,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蘑险,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,440評論 2 348