基于Android實(shí)現(xiàn)百度地圖定位過程詳解
一、問題描述
LBS位置服務(wù)是android應(yīng)用中重要的功能,應(yīng)用越來越廣泛,下面我們逐步學(xué)習(xí)和實(shí)現(xiàn)lbs相關(guān)的應(yīng)用如定位、地圖、導(dǎo)航等,首先我們看如何基于百度地圖實(shí)現(xiàn)定位功能
二、配置環(huán)境
1、注冊(cè)密鑰:地址http://developer.baidu.com/map/
2、下載定位SDK,并導(dǎo)入SDK如圖所示:
三、編寫MyApplication類
編寫MyApplication類,為了使用方便我們可以將實(shí)現(xiàn)定位的方法封裝的Application組件中
封裝下列方法
1、 獲取定位信息——requestLocationInfo()
2、 通過廣播發(fā)送位置信息——sendBroadCast()
3、 停止定位——stopLocationClient()
public class MyApplication extends Application{ public LocationClient mLocationClient = null; public GeofenceClient mGeofenceClient; public MyLocationListenner myListener = new MyLocationListenner(); public static String TAG = "MyApplication"; private static MyApplication mInstance = null; @Override public void onCreate(){ mInstance = this; mLocationClient = new LocationClient(this); /** * 項(xiàng)目的key,自己到官網(wǎng)申請(qǐng) http://lbsyun.baidu.com/apiconsole/key */ mLocationClient.setAK("你的應(yīng)用Key"); mLocationClient.registerLocationListener(myListener); mGeofenceClient = new GeofenceClient(this); super.onCreate(); Log.d(TAG, "... Application onCreate... pid=" + Process.myPid()); } public static MyApplication getInstance(){ return mInstance; } /** * 停止定位 */ public void stopLocationClient(){ if (mLocationClient != null && mLocationClient.isStarted()){ mLocationClient.stop(); } } /** * 發(fā)起定位 */ public void requestLocationInfo(){ setLocationOption(); if (mLocationClient != null && !mLocationClient.isStarted()){ mLocationClient.start(); } if (mLocationClient != null && mLocationClient.isStarted()){ mLocationClient.requestLocation(); } } /** * 設(shè)置百度地圖的相關(guān)參數(shù) */ private void setLocationOption(){ LocationClientOption option = new LocationClientOption(); option.setOpenGps(true); // 打開gps option.setCoorType("bd09ll"); // 設(shè)置坐標(biāo)類型 option.setServiceName("com.baidu.location.service_v2.9"); option.setPoiExtraInfo(true); option.setAddrType("all"); option.setPoiNumber(10); option.disableCache(true); mLocationClient.setLocOption(option); } /** * 監(jiān)聽函數(shù),有更新位置的時(shí)候,格式化成字符串,輸出到屏幕中 */ public class MyLocationListenner implements BDLocationListener { @Override public void onReceiveLocation(BDLocation location){ if (location == null){ sendBroadCast("定位失敗!"); return; } sendBroadCast(location.getAddrStr()); } public void onReceivePoi(BDLocation poiLocation){ if (poiLocation == null){ sendBroadCast("定位失敗!"); return; } sendBroadCast(poiLocation.getAddrStr()); } } /** * 得到發(fā)送廣播 * @param address */ public void sendBroadCast(String address){ stopLocationClient(); Intent intent = new Intent(MainActivity.LOCATION_BCR); intent.putExtra("address", address); sendBroadcast(intent); } }
三、 主程序MainActivity
public class MainActivity extends Activity{ public static String TAG = "LocTestDemo"; private BroadcastReceiver broadcastReceiver; public static String LOCATION_BCR = "location_bcr"; private Button locBtn; private TextView locInfo; private MyApplication application; @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); application=(MyApplication)super.getApplication(); initialize(); initializeViews(); initializeListeners(); } private void initialize(){ registerBroadCastReceiver();//注冊(cè)廣播 } private void initializeViews() { locBtn = (Button) findViewById(R.id.location); locInfo = (TextView) findViewById(R.id.location_info); } private void initializeListeners() { locBtn.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v){ locInfo.setText("定位中..."); //調(diào)用請(qǐng)求定位信息 application.requestLocationInfo(); } }); } /** * 注冊(cè)一個(gè)廣播,監(jiān)聽定位結(jié)果,接受廣播獲得地址信息 */ private void registerBroadCastReceiver() { broadcastReceiver = new BroadcastReceiver(){ public void onReceive(Context context, Intent intent){ String address = intent.getStringExtra("address"); locInfo.setText(address); } }; IntentFilter intentToReceiveFilter = new IntentFilter(); intentToReceiveFilter.addAction(LOCATION_BCR); registerReceiver(broadcastReceiver, intentToReceiveFilter); } @Override protected void onDestroy(){ super.onDestroy(); unregisterReceiver(broadcastReceiver); } }
四、 AndroidManifest.xml配置信息
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.jereh.baidulocation" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> <application android:name="com.jereh.baidulocation.MyApplication" android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.jereh.baidulocation.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote" > <intent-filter> <action android:name="com.baidu.location.service_v2.2" > </action> </intent-filter> </service> </application> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" > </uses-permission> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" > </uses-permission> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" > </uses-permission> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" > </uses-permission> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" > </uses-permission> <uses-permission android:name="android.permission.READ_PHONE_STATE" > </uses-permission> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" > </uses-permission> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" > </uses-permission> <uses-permission android:name="android.permission.READ_LOGS" > </uses-permission> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.WRITE_SETTINGS" /> </manifest>
- android實(shí)現(xiàn)百度地圖自定義彈出窗口功能
- Android百度地圖定位后獲取周邊位置的實(shí)現(xiàn)代碼
- Android下如何使用百度地圖sdk
- Android百度地圖實(shí)現(xiàn)搜索和定位及自定義圖標(biāo)繪制并點(diǎn)擊時(shí)彈出泡泡
- Android 百度地圖POI搜索功能實(shí)例代碼
- Android百度定位導(dǎo)航之基于百度地圖移動(dòng)獲取位置和自動(dòng)定位
- Android 調(diào)用百度地圖API示例
- Android百度地圖自定義公交路線導(dǎo)航
- Android SDK 百度地圖通過poi城市內(nèi)檢索簡(jiǎn)介接口的使用
- Android百度地圖之方向感應(yīng)和模式更改
相關(guān)文章
Android Studio自定義萬能注釋模板與創(chuàng)建類,方法注釋模板操作
這篇文章主要介紹了Android Studio自定義萬能注釋模板與創(chuàng)建類,方法注釋模板操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-03-03Android studio 下JNI編程實(shí)例并生成so庫(kù)的實(shí)現(xiàn)代碼
這篇文章主要介紹了Android studio 下JNI編程實(shí)例并生成so庫(kù),需要的朋友可以參考下2017-09-09Android開發(fā)中數(shù)據(jù)庫(kù)升級(jí)且表添加新列的方法
這篇文章主要介紹了Android開發(fā)中數(shù)據(jù)庫(kù)升級(jí)且表添加新列的方法,結(jié)合具體實(shí)例形式分析了Android數(shù)據(jù)庫(kù)升級(jí)開發(fā)過程中常見問題與相關(guān)操作技巧,需要的朋友可以參考下2017-09-09Android時(shí)間選擇器、日期選擇器實(shí)現(xiàn)代碼
這篇文章主要為大家分別介紹了Android時(shí)間選擇器、日期選擇器實(shí)現(xiàn)代碼,感興趣的小伙伴們可以參考一下2016-04-04Android ProgressDialog使用總結(jié)
ProgressDialog 繼承自AlertDialog,AlertDialog繼承自Dialog,實(shí)現(xiàn)DialogInterface接口,本文給大家介紹Android ProgressDialog使用總結(jié)的相關(guān)知識(shí),需要的朋友通過此文一起學(xué)習(xí)吧2016-01-01詳解Android的Socket通信、List加載更多、Spinner下拉列表
本文主要對(duì)Android的Socket通信、List加載更多、Spinner下拉列表進(jìn)行案例分析。具有很好的參考價(jià)值,需要的朋友一起來看下吧2016-12-12Android編程使用內(nèi)容提供者方式(ContentProvider)進(jìn)行存儲(chǔ)的方法
這篇文章主要介紹了Android編程使用內(nèi)容提供者方式進(jìn)行存儲(chǔ)的方法,涉及Android內(nèi)容提供者的創(chuàng)建,配置及針對(duì)數(shù)據(jù)的增刪改查等操作技巧,需要的朋友可以參考下2016-01-01