Android手机百度地图开发步骤

来源:互联网 发布:2k17樱木花道脸部数据 编辑:程序博客网 时间:2024/04/27 02:32


关于百度地图的开发,百度地图API有很详细的开发资料,所以本篇文章不在于写开发技术,而在于开发步骤

1.导入库文件

我们想要开发百度地图,那么首先需要导入库文件(这些库文件可以从这里下载)

将liblocSDK4d.so文件拷贝到libs/armeabi目录下。

将locSDK4.2.jar文件拷贝到工程的libs目录下。

  

在工程属性->Java Build Path->Libraries中选择“AddJARs”,

选定locSDK4.2.jar,确定后返回。这样您就可以在程序中使用百度定位SDK了。



2.设置AndroidManifest.xml

在application标签中声明service组件,每个app拥有自己单独的定位service

        <service             android:name="com.baidu.location.f"             android:enabled="true"             android:process=":remote"></service>

3.声明使用权限

<permission android:name="android.permission.BAIDU_LOCATION_SERVICE" >    </permission>    <uses-permission android:name="android.permission.BAIDU_LOCATION_SERVICE" >    </uses-permission>    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" >    </uses-permission>    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" >    </uses-permission>    <uses-permission android:name="android.permission.INTERNET" >    </uses-permission>    <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" >    </uses-permission>    <!-- <uses-permission android:name="android.permission.WRITE_APN_SETTINGS"></uses-permission> -->    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" >    </uses-permission>    <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />    <uses-permission android:name="android.permission.WAKE_LOCK" >    </uses-permission>    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />    <uses-permission android:name="android.permission.ACCESS_GPS" />    <uses-permission android:name="android.permission.READ_PHONE_STATE" />    <uses-permission android:name="android.permission.READ_CONTACTS" />    <uses-permission android:name="android.permission.CALL_PHONE" />    <uses-permission android:name="android.permission.READ_SMS" />    <uses-permission android:name="android.permission.SEND_SMS" />    <!-- SDK1.5需要android.permission.GET_TASKS权限判断本程序是否为当前运行的应用? -->    <uses-permission android:name="android.permission.GET_TASKS" />    <uses-permission android:name="android.permission.CAMERA" >    </uses-permission>    <uses-permission android:name="android.permission.RECORD_AUDIO" >    </uses-permission>    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" >    </uses-permission>    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />    <uses-permission android:name="android.permission.BROADCAST_STICKY" />    <uses-permission android:name="android.permission.WRITE_SETTINGS" />    <!-- 来电消音 -->    <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" >    </uses-permission>    <uses-permission android:name="android.permission.READ_PHONE_STATE" />    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />    <uses-permission android:name="android.permission.GET_ACCOUNTS" />  <uses-permission android:name="android.permission.USE_CREDENTIALS" />  <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />  <uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.WRITE_SETTINGS" />  <uses-permission android:name="android.permission.READ_PHONE_STATE" />

4.设置AcessKey

使用SDK4.2需要在Mainfest.xml设置Accesskey,设置有误会引起定位和地理围栏服务不能正常使用,必须进行Accesskey的正确设置。

设置AccessKey,在application标签中加入

备注:value = "key"的key是开发者申请的key,关于Key的申请参考开发者key

<meta-data          android:name="com.baidu.lbsapi.API_KEY"          android:value="key" />


5.使用前初始化

import com.baidu.mapapi.SDKInitializer;import android.app.Application;public class DemoApplication extends Application{@Overridepublic void onCreate(){super.onCreate();// 在使用 SDK 各组间之前初始化 context 信息,传入 ApplicationContextSDKInitializer.initialize(this);}}
同时在Mainfest.xml的Application加入如下一行

        android:name="com.phonemap.DemoApplication"


6.设置显示界面

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical" >        <com.baidu.mapapi.map.MapView        android:id="@+id/bmapView"        android:layout_width="fill_parent"        android:layout_height="fill_parent"        android:clickable="true" /></LinearLayout>


7.实现定位操作

import java.util.Timer;import java.util.TimerTask;import com.baidu.location.BDLocation;import com.baidu.location.BDLocationListener;import com.baidu.location.LocationClient;import com.baidu.location.LocationClientOption;import com.baidu.mapapi.map.BaiduMap;import com.baidu.mapapi.map.BitmapDescriptor;import com.baidu.mapapi.map.BitmapDescriptorFactory;import com.baidu.mapapi.map.CircleOptions;import com.baidu.mapapi.map.MapStatusUpdate;import com.baidu.mapapi.map.MapStatusUpdateFactory;import com.baidu.mapapi.map.MapView;import com.baidu.mapapi.map.Marker;import com.baidu.mapapi.map.MarkerOptions;import com.baidu.mapapi.map.MyLocationData;import com.baidu.mapapi.map.OverlayOptions;import com.baidu.mapapi.map.Stroke;import com.baidu.mapapi.map.TextOptions;import com.baidu.mapapi.map.BaiduMap.OnMarkerClickListener;import com.baidu.mapapi.model.LatLng;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.widget.Toast;public class MainActivity extends Activity{private MapView mMapView;// 定位相关LocationClient mLocClient;public MyLocationListenner myListener = new MyLocationListenner();BaiduMap mBaiduMap;boolean isFirstLoc = true;// 是否首次定位private Marker mMarker;BitmapDescriptor bd = BitmapDescriptorFactory.fromResource(R.drawable.icon_gcoding);BitmapDescriptor bdGround = BitmapDescriptorFactory.fromResource(R.drawable.ground_overlay);public final double tbox_latitude = 30.57;public final double tbox_longitude = 114.02;static final int REFRESH = 0;//定时器设置Timer timer = new Timer();TimerTask task = new TimerTask(){@Overridepublic void run(){Message message = new Message();message.what = REFRESH;handler.sendMessage(message);}};Handler handler = new Handler(){public void handleMessage(Message msg){switch (msg.what){case REFRESH:RefreshData();break;default:break;}}};public Thread myThread = new Thread(new Runnable(){@Overridepublic void run(){}});public void RefreshData(){}@Overrideprotected void onCreate(Bundle savedInstanceState){// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);//在使用SDK各组件之前初始化context信息,传入ApplicationContext          //注意该方法要再setContentView方法之前实现          //SDKInitializer.initialize(getApplicationContext());        setContentView(R.layout.tbox_location);// 初始化地图mMapView = (MapView) findViewById(R.id.bmapView);mBaiduMap = mMapView.getMap();// 开启定位图层mBaiduMap.setMyLocationEnabled(true);// 定位初始化mLocClient = new LocationClient(this);mLocClient.registerLocationListener(myListener);LocationClientOption option = new LocationClientOption();option.setOpenGps(true);// 打开gpsoption.setCoorType("bd09ll"); // 设置坐标类型//国测局经纬度坐标系gcj02、百度墨卡托坐标系bd09、 百度经纬度坐标系bd09lloption.setScanSpan(1000);mLocClient.setLocOption(option);mLocClient.start();mBaiduMap.setOnMarkerClickListener(new OnMarkerClickListener() {public boolean onMarkerClick(final Marker marker) {if (marker == mMarker) {Toast.makeText(TboxActivity.this, "TBOX位置信息", Toast.LENGTH_LONG).show();}return true;}});//开启定时器timer.schedule(task,1000,1000);//开启线程myThread.start();}/** * 定位SDK监听函数 */public class MyLocationListenner implements BDLocationListener {@Overridepublic void onReceiveLocation(BDLocation location) {// map view 销毁后不在处理新接收的位置if (location == null || mMapView == null)return;MyLocationData locData = new MyLocationData.Builder().accuracy(location.getRadius())// 此处设置开发者获取到的方向信息,顺时针0-360.direction(100).latitude(location.getLatitude()).longitude(location.getLongitude()).build();mBaiduMap.setMyLocationData(locData);if (isFirstLoc) {isFirstLoc = false;LatLng ll = new LatLng(location.getLatitude(),location.getLongitude());MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(ll);mBaiduMap.animateMapStatus(u);}}public void onReceivePoi(BDLocation poiLocation) {}}@Overrideprotected void onPause() {super.onPause();// activity 暂停时同时暂停地图控件mMapView.onPause();}@Overrideprotected void onResume() {super.onResume();// activity 恢复时同时恢复地图控件mMapView.onResume();}@Overrideprotected void onDestroy() {super.onDestroy();// 退出时销毁定位mLocClient.stop();// 关闭定位图层mBaiduMap.setMyLocationEnabled(false);mMapView.onDestroy();mMapView = null;}}

8.一个简易的定位操作就实现了

效果如图

ok,这样一个简单的定位功能就做好了。


0 0
原创粉丝点击