基于Android實現(xiàn)百度地圖定位過程詳解
一、問題描述
LBS位置服務(wù)是android應(yīng)用中重要的功能,應(yīng)用越來越廣泛,下面我們逐步學(xué)習(xí)和實現(xiàn)lbs相關(guān)的應(yīng)用如定位、地圖、導(dǎo)航等,首先我們看如何基于百度地圖實現(xiàn)定位功能
二、配置環(huán)境
1、注冊密鑰:地址http://developer.baidu.com/map/
2、下載定位SDK,并導(dǎo)入SDK如圖所示:

三、編寫MyApplication類
編寫MyApplication類,為了使用方便我們可以將實現(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);
/**
* 項目的key,自己到官網(wǎ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ù),有更新位置的時候,格式化成字符串,輸出到屏幕中
*/
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();//注冊廣播
}
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)用請求定位信息
application.requestLocationInfo();
}
});
}
/**
* 注冊一個廣播,監(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>
相關(guān)文章
android 9.0 launcher3 去掉抽屜式顯示所有 app(代碼詳解)
本文通過實例代碼給大家介紹了android 9.0 Launcher3 去掉抽屜式,顯示所有 app,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2019-11-11
Android 廣播監(jiān)聽網(wǎng)絡(luò)狀態(tài)詳解及實例代碼
這篇文章主要介紹了Android 廣播監(jiān)聽網(wǎng)絡(luò)狀態(tài)詳解及實例代碼的相關(guān)資料,需要的朋友可以參考下2017-02-02
Android中控制和禁止ScrollView自動滑動到底部的方法
這篇文章主要給大家介紹了關(guān)于Android中控制和禁止ScrollView自動滑動到底部的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對各位Android開發(fā)者們具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-10-10
解決Fedora14下eclipse進(jìn)行android開發(fā),ibus提示沒有輸入窗口的方法詳解
本篇文章是對Fedora14下eclipse進(jìn)行android開發(fā),ibus提示沒有輸入窗口的解決方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05

