使用百度地图(上)
来源:互联网 发布:网络公开课那个好 编辑:程序博客网 时间:2024/06/13 01:04
人生没有理想,生命便只是一堆空架子。
本讲内容:使用百度地图
1、创建应用
创建应用地址:http://lbsyun.baidu.com/apiconsole/key/create
安全码是由数字签名+;+包名组成。数字签名指的是我们打包程序时所用keystore的SHAL指纹,可以在Eclipse中查看。点击导航栏的Window--Preferences--Android--Build.如图显示:
其中78:DA:7D:EB:50:6D:04:4A:C1:E3:EC:29:B8:D3:AF:19:D2:AD:D2:7C就是我们所需要的SHAL指纹,包名是指你新建的程序的包名。譬如:安全码:78:DA:7D:EB:50:6D:04:4A:C1:E3:EC:29:B8:D3:AF:19:D2:AD:D2:7C;com.example.baidumaptest
创建应用成功,如图显示
其中dhmiAXZK4n8CncsmgEneuaiQ就是申请到的APIKey,有了它就可以进行后续的地图开发了。
2、下载百度地图Android版的SDK
下载地址:http://developer.baidu.com/map/index.php?title=androidsdk/sdkandev-download
示例一:
1、导入jar包
然后在工程属性->Java Build Path->Libraries中选择“Add External JARs”,选定baidumapapi_vX_X_X.jar,确定后返回,您就可以正常使用百度地图SDK为您提供的全部功能了。
注意:armeabi目录是专门用于存放so文件的地方,so文件是用C/C++语言进行编写的,然后再用NDK编译出来的,而上面.so文件已经由百度帮我们编译好了,因此直接放到armeabi目录下就可以使用了。
注意:有时会可能jar包无导入情况。在libs目录上点右键,选Bulid path –> Use as source folder。
下面是res/layout/activity_main.xml 布局文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <com.baidu.mapapi.map.MapView android:id="@+id/bmapView" android:layout_width="match_parent" android:layout_height="match_parent" android:clickable="true" /></RelativeLayout>这个MapView是由百度提供的自定义控件,所以在使用它需要将完整的包名加上。
下面是MainActivity.java主界面文件:
public class MainActivity extends Activity {private MapView mMapView=null;protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//在使用SDK各组件之前初始化context信息,传入ApplicationContext //注意该方法要再setContentView方法之前实现SDKInitializer.initialize(getApplicationContext()); setContentView(R.layout.activity_main);initView();}private void initView() {mMapView = (MapView) findViewById(R.id.bmapView);}protected void onResume() {super.onResume();//在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理 mMapView.onResume();}protected void onPause() {super.onPause();//在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理 mMapView.onPause(); }protected void onDestroy() {super.onDestroy();//在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理 mMapView.onDestroy(); }}
1、在application中添加开发密钥
<application> <meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="开发者 key" /> </application>
2、添加所需权限
<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.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.BROADCAST_STICKY" /> <uses-permission android:name="android.permission.WRITE_SETTINGS" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" />
示例二:地图类型
1、百度地图Android SDK为您提供了两种类型的地图资源(普通矢量地图和卫星图),默认是普通矢量地图,开发者可以利用BaiduMap中的mapType()方法来设置地图类型。核心代码如下:
mMapView = (MapView) findViewById(R.id.bmapView); mBaiduMap = mMapView.getMap(); //普通地图 mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL); //卫星地图 mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);
注意:百度地图提供了一个MapStatusUpdateFactory类来设置地图的缩放级别,取值范围是3-19,级别越高,地图显示的信息就越精细。
MapStatusUpdate msu=MapStatusUpdateFactory.zoomTo(15);//设置缩放级别mBaiduMap.setMapStatus(msu);
2、实时交通图
//开启交通图 mBaiduMap.setTrafficEnabled(true);
下面是res/menu/main文件
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" > <item android:id="@+id/id_map_common" android:title="普通地图" app:showAsAction="never"/> <item android:id="@+id/id_map_site" android:title="卫星地图" app:showAsAction="never"/> <item android:id="@+id/id_map_traffic" android:title="实时交通(off)" app:showAsAction="never"/></menu>
下面是MainActivity.java主界面文件:
public class MainActivity extends Activity {private MapView mMapView;private BaiduMap mBaiduMap;private LocationManager locationManager;private String provider;protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//在使用SDK各组件之前初始化context信息,传入ApplicationContext //注意该方法要再setContentView方法之前实现SDKInitializer.initialize(getApplicationContext()); setContentView(R.layout.activity_main);initView();}private void initView() {mMapView = (MapView) findViewById(R.id.bmapView);mBaiduMap=mMapView.getMap();MapStatusUpdate msu=MapStatusUpdateFactory.zoomTo(15);//设置缩放级别mBaiduMap.setMapStatus(msu);}public boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.main, menu);return true;}public boolean onOptionsItemSelected(MenuItem item) {switch (item.getItemId()) {case R.id.id_map_common://默认是普通地图mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);break;case R.id.id_map_site://卫星地图mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);break;case R.id.id_map_traffic://实时交通(红线代表阻塞,绿线体表畅通)if(mBaiduMap.isTrafficEnabled()){mBaiduMap.setTrafficEnabled(false);item.setTitle("实时交通(off)");}else{mBaiduMap.setTrafficEnabled(true);item.setTitle("实时交通(on)");}break;}return super.onOptionsItemSelected(item);}………………}
示例三:定位功能
1、LocationClient定位SDK的核心类,LocationClient类必须在主线程中声明。需要Context类型的参数。Context需要时全进程有效的context,推荐用getApplicationConext获取全进程有效的context,我们调用registerLocationListener(BDLocationListener)方法来注册定位监听接口。
2、BDLocationListener定位接口,一般新建一个类实现它,并重写onReceiveLocation()方法。
3、LocationClientOption 类用来设置定位SDK的定位方式。
导入百度地图定位SDK:liblocSDK5.so,如下图
在菜单添加一个定位到我的位置按钮:
<item android:id="@+id/id_map_location" android:title="我的位置" app:showAsAction="never"/>
下面是MainActivity.java主界面文件:
public class MainActivity extends Activity {private MapView mMapView;private BaiduMap mBaiduMap;private Context context;//定位相关private LocationClient mLocationClient;private MyLocationListener mLocationListener;private boolean isFirstIn = true;//第一次启动时定位到设置当前位置private double mLatitude;private double mLongtitude;protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//在使用SDK各组件之前初始化context信息,传入ApplicationContext //注意该方法要再setContentView方法之前实现SDKInitializer.initialize(getApplicationContext()); setContentView(R.layout.activity_main);this.context=this;initView();initLocation();}private void initView() {mMapView = (MapView) findViewById(R.id.bmapView);mBaiduMap=mMapView.getMap();MapStatusUpdate msu=MapStatusUpdateFactory.zoomTo(15);//设置缩放级别mBaiduMap.setMapStatus(msu);}/** * 初始化定位 */private void initLocation(){mLocationClient=new LocationClient(getApplicationContext());mLocationListener=new MyLocationListener();mLocationClient.registerLocationListener(mLocationListener);LocationClientOption option=new LocationClientOption();option.setCoorType("bd09ll");// 设置返回的坐标类型(设置返回的定位结果是百度经纬度,默认值gcj02)option.setIsNeedAddress(true);//返回的定位结果包含地址信息option.setOpenGps(true);//是否打开GPS option.setScanSpan(3000);//设置发起定位请求的间隔时间为3000ms onReceiveLocation方法每隔3秒执行一次mLocationClient.setLocOption(option);}public boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.main, menu);return true;}public boolean onOptionsItemSelected(MenuItem item) {switch (item.getItemId()) {case R.id.id_map_common://默认是普通地图mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);break;case R.id.id_map_site://卫星地图mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);break;case R.id.id_map_traffic://实时交通(红线代表阻塞,绿线体表畅通)if(mBaiduMap.isTrafficEnabled()){mBaiduMap.setTrafficEnabled(false);item.setTitle("实时交通(off)");}else{mBaiduMap.setTrafficEnabled(true);item.setTitle("实时交通(on)");}break;case R.id.id_map_location:centerToMyLocation();break;}return super.onOptionsItemSelected(item);}/** *定位接口 *onReceiveLocation():接收异步返回的定位结果 */private class MyLocationListener implements BDLocationListener{public void onReceiveLocation(BDLocation location) {if(location==null){return;}//当参数比较多时,习惯在类里面建立一个Builder内部类来初始化参数MyLocationData data=new MyLocationData.Builder()//.accuracy(location.getRadius())//.latitude(location.getLatitude())//.longitude(location.getLongitude())//.build();mBaiduMap.setMyLocationData(data);// 更新经纬度mLatitude = location.getLatitude();mLongtitude = location.getLongitude();//使每次发起定位请求不会执行if(isFirstIn){centerToMyLocation();isFirstIn=false;Toast.makeText(context, location.getAddrStr(),Toast.LENGTH_LONG).show();}}}/** * 定位到我的位置 */private void centerToMyLocation(){LatLng latLng = new LatLng(mLatitude, mLongtitude);MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng);mBaiduMap.animateMapStatus(msu);}protected void onStart() {super.onStart();// 开启定位mBaiduMap.setMyLocationEnabled(true);// 开启定位图层 if(!mLocationClient.isStarted()){mLocationClient.start();//启动}}protected void onStop() {super.onStop();// 停止定位mBaiduMap.setMyLocationEnabled(false);mLocationClient.stop();}protected void onResume() {super.onResume();//在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理 mMapView.onResume();}protected void onPause() {super.onPause(); //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理 mMapView.onPause(); }protected void onDestroy() {super.onDestroy();//在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理 mMapView.onDestroy(); }}
在AndroidMainfest.xml文件:(不然onReceiveLocation方法只会启动一次)
<service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote" > </service>
- 使用百度地图(上)
- 百度地图【上】
- 百度地图开发总结----1.在网页上使用百度地图(默认的)
- 关于百度地图在安卓模拟器上的使用
- 百度地图使用slidingmenu在5.0上的bug
- 百度地图API:在RichMarker上使用InfoBox
- 百度地图API:在RichMarker上使用InfoBox
- 在手机上百度地图定位的使用
- 百度地图API使用
- 百度地图使用案例
- Android百度地图使用
- Android百度地图使用
- 百度地图API使用
- 百度地图SDK使用
- 百度地图 使用详解
- 百度地图使用
- 使用百度地图
- 百度地图使用小结
- 一周总结(Android):Gradle和ProGuard混淆打包
- 黑马程序员——面向对象(四)
- Android中ListView相关属性
- 实现dup2功能相同的函数
- 黑马程序员——多线程
- 使用百度地图(上)
- 黑马程序员——String
- CentOS 初始化时普通用户修改ROOT密码并且开启远程登录
- 领域模型的概念
- 黑马程序员——集合框架
- dev-ops
- 初始化-指定初始化
- 戒烟周报
- [4.21]编写一个程序,已有若干个学生的数据,包括学号、姓名、成绩、要求输出这些学生的数据并计算出学生人数和平均成绩(要求将学生人数和总成绩用静态数据成员表示)。