你的位置:首页 > 操作系统

[操作系统]Android定位地图导航——基于百度地图实现的定位功能


一、问题描述

LBS位置服务是android应用中重要的功能,应用越来越广泛,下面我们逐步学习和实现lbs相关的应用如定位、地图、导航等,首先我们看如何基于百度地图实现定位功能

二、配置环境

1、注册密钥:地址http://developer.baidu.com/map/

2、下载定位SDK,并导入SDK如图所示:

 

三、编写MyApplication类

编写MyApplication类,为了使用方便我们可以将实现定位的方法封装的Application组件中

封装下列方法

1、  获取定位信息——requestLocationInfo()

2、  通过广播发送位置信息——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,自己到官网申请 http://lbsyun.baidu.com/apiconsole/key     */    mLocationClient.setAK("你的应用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();    }   }  /**   * 发起定位   */  public void requestLocationInfo(){    setLocationOption();    if (mLocationClient != null && !mLocationClient.isStarted()){      mLocationClient.start();    }    if (mLocationClient != null && mLocationClient.isStarted()){      mLocationClient.requestLocation();    }   }  /**   * 设置百度地图的相关参数   */  private void setLocationOption(){    LocationClientOption option = new LocationClientOption();    option.setOpenGps(true); // 打开gps    option.setCoorType("bd09ll"); // 设置坐标类型    option.setServiceName("com.baidu.location.service_v2.9");    option.setPoiExtraInfo(true);    option.setAddrType("all");    option.setPoiNumber(10);    option.disableCache(true);    mLocationClient.setLocOption(option);  }  /**   * 监听函数,有更新位置的时候,格式化成字符串,输出到屏幕中   */  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());    }  }    /**   * 得到发送广播   * @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("定位中...");      //调用请求定位信息      application.requestLocationInfo();      }    });  }  /**   * 注册一个广播,监听定位结果,接受广播获得地址信息   */  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.
<??><manifest ="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>

 

作者:杰瑞教育
出处:http://www.cnblogs.com/jerehedu/ 
版权声明:本文版权归烟台杰瑞教育科技有限公司和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
技术咨询:JRedu技术交流