百度Android 定位SDK v4.0示例

来源:互联网 发布:店铺推广淘宝客亏死了 编辑:程序博客网 时间:2024/05/07 03:40

之前项目中用到了百度定位SDK v3.4,现需要升级到v4.0版本,于是乎去百度开放平台看了Android 定位SDKv4.0文档
链接地址:http://developer.baidu.com/map/geosdk-android.htm

百度Android平台定位 SDK自v4.0版本开始引用了Key验证体系。因此,当您选择使用v4.0及之后版本的定位SDK时,需要先申请且配置Key,并在程序相应位置填写您的Key。(选择使用v3.3及之前版本SDK的开发者,不需要使用Key)
Key机制:每个Key仅且唯一对于1个应用验证有效,即对该Key配置环节中使用的包名匹配的应用有效。因此,多个应用【包括多个包名】需申请多个Key,或者对1个Key进行多次配置。

具体可参考 申请密钥 http://developer.baidu.com/map/geosdk-android-key.htm
PS:百度Android平台定位SDK 文档的确要比高德的文档写的详细完整一些,后面会介绍高德Android平台定位SDK


申请完Key之后就简单很多啦,这里以最新的V4.0版本为例。

1、导入库文件

将liblocSDK4.so文件拷贝到libs/armeabi目录下。将locSDK4.0.jar文件拷贝到工程的libs目录下,并在工程属性->Java Build Path->Libraries中选择“Add JARs”,选定locSDK4.0.jar,确定后返回。


2、设置AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.baiduloc.test"    android:versionCode="1"    android:versionName="1.0" >    <uses-sdk        android:minSdkVersion="8"        android:targetSdkVersion="18" />    <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>    <application        android:allowBackup="true"        android:icon="@drawable/ic_launcher"        android:label="@string/app_name"        android:theme="@style/AppTheme" >        <activity            android:name="com.baiduloc.test.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" >        </service>    </application></manifest>


3、使用LocationClient定位

package com.baiduloc.test;import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;import com.baidu.location.BDLocation;import com.baidu.location.BDLocationListener;import com.baidu.location.LocationClient;import com.baidu.location.LocationClientOption;public class MainActivity extends Activity implements OnClickListener {private static final String TAG = MainActivity.class.getSimpleName();private TextView tv_address;private LocationClient mLocationClient;private MyLocationListenner myListener;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mLocationClient = new LocationClient(getApplicationContext());/**—————————————————————————————————————————————————————————————————— * 这里的AK和应用签名包名绑定,如果使用在自己的工程中需要替换为自己申请的Key * —————————————————————————————————————————————————————————————————— */mLocationClient.setAK("dMGlsmpHOollXfGZ8jKfMpjQ");myListener = new MyLocationListenner();mLocationClient.registerLocationListener(myListener);findView();}private void findView() {Button bt_start = (Button) findViewById(R.id.bt_start);tv_address = (TextView) findViewById(R.id.tv_address);bt_start.setOnClickListener(this);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.bt_start:if (mLocationClient != null){//if (mLocationClient != null && mLocationClient.isStarted()){Log.i(TAG, "start position");setLocationOption();mLocationClient.start();mLocationClient.requestLocation();}else{Log.d(TAG, "locClient is null or not started");}break;default:break;}}//设置相关参数private void setLocationOption(){LocationClientOption option = new LocationClientOption();option.setOpenGps(true);//打开gpsoption.setCoorType("bd09ll");//设置坐标类型option.setServiceName("com.baidu.location.service_v2.9");option.setAddrType("all");option.setScanSpan(2000);//设置定位模式,小于1秒则一次定位;大于等于1秒则定时定位//option.setPriority(LocationClientOption.NetWorkFirst);      //设置网络优先option.setPriority(LocationClientOption.GpsFirst);        //不设置,默认是gps优先//option.setPoiNumber(5);//最多返回POI个数//option.setPoiDistance(1000); //poi查询距离//option.setPoiExtraInfo(true); //是否需要POI的电话和地址等详细信息option.disableCache(true);mLocationClient.setLocOption(option);}/** * 监听函数,有更新位置的时候,格式化成字符串,输出到屏幕中 */public class MyLocationListenner implements BDLocationListener {@Overridepublic void onReceiveLocation(BDLocation location) {if (location == null)return ;StringBuffer sb = new StringBuffer(256);sb.append("time : ");sb.append(location.getTime());sb.append("\nerror code : ");sb.append(location.getLocType());sb.append("\nlatitude : ");sb.append(location.getLatitude());sb.append("\nlontitude : ");sb.append(location.getLongitude());sb.append("\nradius : ");sb.append(location.getRadius());if (location.getLocType() == BDLocation.TypeGpsLocation){sb.append("\nspeed : ");sb.append(location.getSpeed());sb.append("\nsatellite : ");sb.append(location.getSatelliteNumber());} else if (location.getLocType() == BDLocation.TypeNetWorkLocation){/** * 格式化显示地址信息 */sb.append("\n省:");sb.append(location.getProvince());sb.append("\n市:");sb.append(location.getCity());sb.append("\n区/县:");sb.append(location.getDistrict());sb.append("\naddr : ");sb.append(location.getAddrStr());}sb.append("\nsdk version : ");sb.append(mLocationClient.getVersion());sb.append("\nisCellChangeFlag : ");sb.append(location.isCellChangeFlag());Log.i(TAG, sb.toString());tv_address.setText(sb.toString());}public void onReceivePoi(BDLocation poiLocation) {if (poiLocation == null){return ; }StringBuffer sb = new StringBuffer(256);sb.append("Poi time : ");sb.append(poiLocation.getTime());sb.append("\nerror code : "); sb.append(poiLocation.getLocType());sb.append("\nlatitude : ");sb.append(poiLocation.getLatitude());sb.append("\nlontitude : ");sb.append(poiLocation.getLongitude());sb.append("\nradius : ");sb.append(poiLocation.getRadius());if (poiLocation.getLocType() == BDLocation.TypeNetWorkLocation){sb.append("\naddr : ");sb.append(poiLocation.getAddrStr());} if(poiLocation.hasPoi()){sb.append("\nPoi:");sb.append(poiLocation.getPoi());}else{sb.append("noPoi information");}Log.i(TAG, sb.toString());}}@Overridepublic void onStop() {if(mLocationClient!=null){mLocationClient.stop();mLocationClient = null;}super.onStop();}}




Demo下载:http://download.csdn.net/detail/fx_sky/6877595







0 0
原创粉丝点击