百度地图api以及定位api的开发实现定位功能
来源:互联网 发布:mysql的可视化界面 编辑:程序博客网 时间:2024/06/11 04:38
首先,通过百度地图api的主页点击Android SDK申请一个key,按照百度首页操作即可.另本文主要是讲解如何创建一个android的定位功能,首先创建一个工程,导入百度api的包文件,按照百度地图官网操作即可.下面贴出代码配置 AndroidManifest.xml 加入一些相关操作权限以及该应用对于百度地图api的支持,
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.maylor.demo" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="19" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote" > </service> <activity android:name="com.maylor.demo.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> </application> <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" /> <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" /> <supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="false" android:resizeable="true" android:smallScreens="true" /></manifest>
另外要设置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" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <com.baidu.mapapi.map.MapView android:id="@+id/bmapsView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:clickable="true" /> </RelativeLayout>最后就是MainActivity.java的代码了
package com.maylor.demo;import android.app.Activity;import android.content.Context;import android.graphics.drawable.Drawable;import android.os.Bundle;import android.util.AttributeSet;import android.util.Log;import android.view.Menu;import android.view.MotionEvent;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.RadioGroup;import android.widget.RadioGroup.OnCheckedChangeListener;import android.widget.TextView;import android.widget.Toast;import com.maylor.demo.R;import com.baidu.location.BDLocation;import com.baidu.location.BDLocationListener;import com.baidu.location.LocationClient;import com.baidu.location.LocationClientOption;import com.baidu.mapapi.BMapManager;import com.baidu.mapapi.map.LocationData;import com.baidu.mapapi.map.MapController;import com.baidu.mapapi.map.MapView;import com.baidu.mapapi.map.MyLocationOverlay;import com.baidu.mapapi.map.MyLocationOverlay.LocationMode;import com.baidu.mapapi.map.PopupClickListener;import com.baidu.mapapi.map.PopupOverlay;import com.baidu.platform.comapi.basestruct.GeoPoint;/** * 此demo用来展示如何结合定位SDK实现定位,并使用MyLocationOverlay绘制定位位置 同时展示如何使用自定义图标绘制并点击时弹出泡泡 * */public class MainActivity extends Activity {// 定位相关LocationClient mLocClient;LocationData locData = null;public MyLocationListenner myListener = new MyLocationListenner();// 定位图层MyLocationOverlay myLocationOverlay = null;// 弹出泡泡图层private View viewCache = null;// 地图相关,使用继承MapView的MyLocationMapView目的是重写touch事件实现泡泡处理// 如果不处理touch事件,则无需继承,直接使用MapView即可MapView mMapView = null; // 地图Viewprivate MapController mMapController = null;// UI相关BMapManager mBMapManager = null;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);/** * 使用地图sdk前需先初始化BMapManager. BMapManager是全局的,可为多个MapView共用,它需要地图模块创建前创建, * 并在地图地图模块销毁后销毁,只要还有地图模块在使用,BMapManager就不应该销毁 */mBMapManager = new BMapManager(getApplicationContext());/** * 如果BMapManager没有初始化则初始化BMapManager */mBMapManager.init("8qWmg6SZMeDL3o5GEwWPE9vc", null);setContentView(R.layout.activity_main);// 地图初始化mMapView = (MapView) findViewById(R.id.bmapsView);mMapController = mMapView.getController();mMapView.getController().setZoom(14);mMapView.getController().enableClick(true);mMapView.setBuiltInZoomControls(true);// 定位初始化mLocClient = new LocationClient(this);locData = new LocationData();mLocClient.registerLocationListener(myListener);LocationClientOption option = new LocationClientOption();option.setOpenGps(true);// 打开gpsoption.setCoorType("bd09ll"); // 设置坐标类型option.setScanSpan(1000);mLocClient.setLocOption(option);mLocClient.start();if (!mLocClient.isStarted()) {mLocClient.start();mLocClient.requestLocation();} else {mLocClient.requestLocation();}mLocClient.requestLocation();// 定位图层初始化myLocationOverlay = new MyLocationOverlay(mMapView);// 设置定位数据myLocationOverlay.setData(locData);// 添加定位图层mMapView.getOverlays().add(myLocationOverlay);myLocationOverlay.enableCompass();// 修改定位数据后刷新图层生效mMapView.refresh();mMapView.getController().animateTo(new GeoPoint((int) (locData.latitude * 1e6),(int) (locData.longitude * 1e6)));}/** * 定位SDK监听函数 */public class MyLocationListenner implements BDLocationListener {@Overridepublic void onReceiveLocation(BDLocation location) {if (location == null)return;locData.latitude = location.getLatitude();locData.longitude = location.getLongitude();// 如果不显示定位精度圈,将accuracy赋值为0即可locData.accuracy = location.getRadius();// 此处可以设置 locData的方向信息, 如果定位 SDK 未返回方向信息,用户可以自己实现罗盘功能添加方向信息。locData.direction = location.getDerect();// 更新定位数据myLocationOverlay.setData(locData);// 更新图层数据执行刷新后生效mMapView.refresh();// 是手动触发请求或首次定位时,移动到定位点// 移动地图到定位点Log.d("LocationOverlay", "receive location, animate to it");mMapController.animateTo(new GeoPoint((int) (locData.latitude * 1e6),(int) (locData.longitude * 1e6)));}public void onReceivePoi(BDLocation poiLocation) {if (poiLocation == null) {return;}}}@Overrideprotected void onPause() {mMapView.onPause();super.onPause();}@Overrideprotected void onResume() {mMapView.onResume();super.onResume();}@Overrideprotected void onDestroy() {// 退出时销毁定位if (mLocClient != null)mLocClient.stop();mMapView.destroy();super.onDestroy();}@Overrideprotected void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);mMapView.onSaveInstanceState(outState);}@Overrideprotected void onRestoreInstanceState(Bundle savedInstanceState) {super.onRestoreInstanceState(savedInstanceState);mMapView.onRestoreInstanceState(savedInstanceState);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// getMenuInflater().inflate(R.menu.activity_main, menu);return true;}}
实体机安装即可
0 0
- 百度地图api以及定位api的开发实现定位功能
- 使用百度地图api实现定位功能。
- 百度地图api实现定位功能
- 百度地图API开发的定位APK
- 借助百度地图api实现显示地图,自动定位功能
- 使用百度地图api实现定位及选择位置功能
- 使用百度地图api实现定位及选择位置功能
- android 基于百度地图api开发定位以及获取详细地址
- android 基于百度地图api开发定位以及获取详细地址
- android 基于百度地图api开发定位以及获取详细地址
- android 百度地图api 定位以及overlay
- C#-winform地图定位的实现-百度地图API
- iOS百度地图API的使用---定位功能
- 集成百度地图API实现定位
- 利用百度地图API实现WEB定位
- 百度地图API实现定位+路径规划
- js调用百度地图api实现定位
- Android百度地图之定位功能(结合百度地图API)
- HDFS源码分析(2)----HDFS源码结构
- 把char[]数组里面的内容用MessageBox显示出来
- 备忘
- apcache的gzip与deflate对比
- yii url优化
- 百度地图api以及定位api的开发实现定位功能
- 【c++系列】vector初始化和遍历
- Highcharts 操作series 的data里的数据
- myeclipse安装svn插件及汉化方法
- linux的几种锁:信号量、互斥体、自旋锁
- 如何在 Ubuntu 12.04 中安装 GIMP 2.8
- 【例7-6】源程序Bwriter.java,从键盘键入一系列字符串,写入到某磁盘文件中。
- file_get_contents读取 https 请求
- myeclipse 使用记录