安卓实现百度地图调用详细解释
2015-12-28 16:35
344 查看
1、申请一个百度账号
2、输入http://developer.baidu.com/map/网址进入百度地图api
3、找到android开发,下载所需要的SDK
4、点击“开发”里面android地图SDK,了解详细情况
5、点击“获取密匙”-》创建应用——》输入应用名称,应用类型android SDK,数字签名是eclipse里面window里面Preferences的android里面的Build里面查找SHA1,进行粘贴复制
6、包名完全和自己建的工程的包一样名称,然后点击提交
7、讲下载的SDK导入到自己的文件中
8、根据百度地图提供的开发指南,首先在AndroidManifest中添加开发密钥、所需权限等信息;
(1)在application中添加开发密钥
在<application> 中粘贴
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="开发者 key" />
开发者 key改为刚才创建的应用所生成的特有的密匙
2)添加所需权限
<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.WAKE_LOCK"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
在布局xml文件中添加地图控件;
<com.baidu.mapapi.map.MapView
android:id="@+id/bmapView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true" />
在应用程序创建时初始化 SDK引用的Context 全局变量:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//在使用SDK各组件之前初始化context信息,传入ApplicationContext
//注意该方法要再setContentView方法之前实现
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_main);
}
}
注意:在SDK各功能组件使用之前都需要调用
SDKInitializer.initialize(getApplicationContext());,因此我们建议该方法放在Application的初始化方法中
创建地图Activity,管理地图生命周期;
public class MainActivity extends Activity {
MapView mMapView = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//在使用SDK各组件之前初始化context信息,传入ApplicationContext
//注意该方法要再setContentView方法之前实现
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_main);
//获取地图控件引用
mMapView = (MapView) findViewById(R.id.bmapView);
}
@Override
protected void onDestroy() {
super.onDestroy();
//在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
mMapView.onDestroy();
}
@Override
protected void onResume() {
super.onResume();
//在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
mMapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
//在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
mMapView.onPause();
}
}
然后进行完善实现定位以等其他功能,具体MainActivity中代码如
import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.MapStatusUpdate;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.MyLocationConfiguration;
import com.baidu.mapapi.map.MyLocationData;
import com.baidu.mapapi.model.LatLng;
import android.support.v7.app.ActionBarActivity;
import android.content.Context;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.Window;
import android.widget.Toast;
public class MainActivity extends ActionBarActivity {
private MapView mMapView = null;
private BaiduMap mbitMap;
private Context context;
//定位相关
private LocationClient mLocationClient;
private MyLocationListener mMyLocationListener;
private boolean isFirstIn = true;
private double mLatitude;
private double mLongtitude;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
//在使用SDK各组件之前初始化context信息,传入ApplicationContext
//注意该方法要再setContentView方法之前实现
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_main);
this.context=this;
initView();
initLocation();
}
private void initLocation() {
// TODO Auto-generated method stub
mLocationClient = new LocationClient(this);
mMyLocationListener = new MyLocationListener();
mLocationClient.registerLocationListener(mMyLocationListener);
LocationClientOption option = new LocationClientOption();
option.setCoorType("bd09ll");
option.setIsNeedAddress(true);
option.setOpenGps(true);
option.setScanSpan(1000);
mLocationClient.setLocOption(option);
}
private void initView() {
// TODO Auto-generated method stub
mMapView = (MapView) findViewById(R.id.mapView);
mbitMap = mMapView.getMap();
MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(15.0f);
mbitMap.setMapStatus(msu);
}
protected void onResume()
{
super.onResume();
//在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
mMapView.onResume();
}
protected void onStart()
{
super.onStart();
mbitMap.setMyLocationEnabled(true);
if(!mLocationClient.isStarted())
mLocationClient.start();
}
protected void onPause()
{
super.onPause();
//在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
mMapView.onPause();
}
protected void onStop()
{
super.onStop();
mbitMap.setMyLocationEnabled(false);
//if(!mLocationClient.isStarted())
mLocationClient.start();
}
protected void onDestroy()
{
super.onDestroy();
mMapView.onDestroy();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId())
{
case R.id.map_common:
mbitMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
break;
case R.id.map_site:
mbitMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);
break;
case R.id.map_traffic:
if(mbitMap.isTrafficEnabled())
{
mbitMap.setTrafficEnabled(false);
item.setTitle("实时交通off");
}
else
{
mbitMap.setTrafficEnabled(true);
item.setTitle("实时交通on");
}
break;
case R.id.map_location:
centerToMyLocation();
break;
}
return super.onOptionsItemSelected(item);
}
//定位我的位置
private void centerToMyLocation()
{
LatLng latLng = new LatLng(mLatitude,mLongtitude);
MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng);
mbitMap.animateMapStatus(msu);
}
private class MyLocationListener implements BDLocationListener
{
public void onReceiveLocation(BDLocation location)
{
MyLocationData data = new MyLocationData.Builder()//
.accuracy(location.getRadius())//
.latitude(location.getLatitude())// //为了格式好看
.longitude(location.getLongitude()).build();
mbitMap.setMyLocationData(data);
//MyLocationConfiguration config = new MyLocationConfiguration(LocationMode., arg1, arg2)
mLatitude = location.getLatitude();//更新最新的经纬度
mLongtitude = location.getLongitude();
if(isFirstIn)
{
LatLng latLng = new LatLng(location.getLatitude(),location.getLongitude());
MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng);
mbitMap.animateMapStatus(msu);
isFirstIn=false;
Toast.makeText(context, location.getAddrStr(),Toast.LENGTH_SHORT).show();
}
}
}
}
2、输入http://developer.baidu.com/map/网址进入百度地图api
3、找到android开发,下载所需要的SDK
4、点击“开发”里面android地图SDK,了解详细情况
5、点击“获取密匙”-》创建应用——》输入应用名称,应用类型android SDK,数字签名是eclipse里面window里面Preferences的android里面的Build里面查找SHA1,进行粘贴复制
6、包名完全和自己建的工程的包一样名称,然后点击提交
7、讲下载的SDK导入到自己的文件中
8、根据百度地图提供的开发指南,首先在AndroidManifest中添加开发密钥、所需权限等信息;
(1)在application中添加开发密钥
在<application> 中粘贴
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="开发者 key" />
开发者 key改为刚才创建的应用所生成的特有的密匙
2)添加所需权限
<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.WAKE_LOCK"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
在布局xml文件中添加地图控件;
<com.baidu.mapapi.map.MapView
android:id="@+id/bmapView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true" />
在应用程序创建时初始化 SDK引用的Context 全局变量:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//在使用SDK各组件之前初始化context信息,传入ApplicationContext
//注意该方法要再setContentView方法之前实现
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_main);
}
}
注意:在SDK各功能组件使用之前都需要调用
SDKInitializer.initialize(getApplicationContext());,因此我们建议该方法放在Application的初始化方法中
创建地图Activity,管理地图生命周期;
public class MainActivity extends Activity {
MapView mMapView = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//在使用SDK各组件之前初始化context信息,传入ApplicationContext
//注意该方法要再setContentView方法之前实现
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_main);
//获取地图控件引用
mMapView = (MapView) findViewById(R.id.bmapView);
}
@Override
protected void onDestroy() {
super.onDestroy();
//在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
mMapView.onDestroy();
}
@Override
protected void onResume() {
super.onResume();
//在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
mMapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
//在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
mMapView.onPause();
}
}
然后进行完善实现定位以等其他功能,具体MainActivity中代码如
import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.MapStatusUpdate;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.MyLocationConfiguration;
import com.baidu.mapapi.map.MyLocationData;
import com.baidu.mapapi.model.LatLng;
import android.support.v7.app.ActionBarActivity;
import android.content.Context;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.Window;
import android.widget.Toast;
public class MainActivity extends ActionBarActivity {
private MapView mMapView = null;
private BaiduMap mbitMap;
private Context context;
//定位相关
private LocationClient mLocationClient;
private MyLocationListener mMyLocationListener;
private boolean isFirstIn = true;
private double mLatitude;
private double mLongtitude;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
//在使用SDK各组件之前初始化context信息,传入ApplicationContext
//注意该方法要再setContentView方法之前实现
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_main);
this.context=this;
initView();
initLocation();
}
private void initLocation() {
// TODO Auto-generated method stub
mLocationClient = new LocationClient(this);
mMyLocationListener = new MyLocationListener();
mLocationClient.registerLocationListener(mMyLocationListener);
LocationClientOption option = new LocationClientOption();
option.setCoorType("bd09ll");
option.setIsNeedAddress(true);
option.setOpenGps(true);
option.setScanSpan(1000);
mLocationClient.setLocOption(option);
}
private void initView() {
// TODO Auto-generated method stub
mMapView = (MapView) findViewById(R.id.mapView);
mbitMap = mMapView.getMap();
MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(15.0f);
mbitMap.setMapStatus(msu);
}
protected void onResume()
{
super.onResume();
//在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
mMapView.onResume();
}
protected void onStart()
{
super.onStart();
mbitMap.setMyLocationEnabled(true);
if(!mLocationClient.isStarted())
mLocationClient.start();
}
protected void onPause()
{
super.onPause();
//在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
mMapView.onPause();
}
protected void onStop()
{
super.onStop();
mbitMap.setMyLocationEnabled(false);
//if(!mLocationClient.isStarted())
mLocationClient.start();
}
protected void onDestroy()
{
super.onDestroy();
mMapView.onDestroy();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId())
{
case R.id.map_common:
mbitMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
break;
case R.id.map_site:
mbitMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);
break;
case R.id.map_traffic:
if(mbitMap.isTrafficEnabled())
{
mbitMap.setTrafficEnabled(false);
item.setTitle("实时交通off");
}
else
{
mbitMap.setTrafficEnabled(true);
item.setTitle("实时交通on");
}
break;
case R.id.map_location:
centerToMyLocation();
break;
}
return super.onOptionsItemSelected(item);
}
//定位我的位置
private void centerToMyLocation()
{
LatLng latLng = new LatLng(mLatitude,mLongtitude);
MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng);
mbitMap.animateMapStatus(msu);
}
private class MyLocationListener implements BDLocationListener
{
public void onReceiveLocation(BDLocation location)
{
MyLocationData data = new MyLocationData.Builder()//
.accuracy(location.getRadius())//
.latitude(location.getLatitude())// //为了格式好看
.longitude(location.getLongitude()).build();
mbitMap.setMyLocationData(data);
//MyLocationConfiguration config = new MyLocationConfiguration(LocationMode., arg1, arg2)
mLatitude = location.getLatitude();//更新最新的经纬度
mLongtitude = location.getLongitude();
if(isFirstIn)
{
LatLng latLng = new LatLng(location.getLatitude(),location.getLongitude());
MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng);
mbitMap.animateMapStatus(msu);
isFirstIn=false;
Toast.makeText(context, location.getAddrStr(),Toast.LENGTH_SHORT).show();
}
}
}
}
相关文章推荐
- Lua学习笔记(6) : 在Lua中调用C++之函数
- HTML样式选择器style
- iOS数据请求AFNetworking
- JAVA的getClass()
- 图标地址
- php生成验证码
- Bootsrap Table表格分页
- 欢迎使用CSDN-markdown编辑器
- Linux系统日志及日志分析
- iOS 图形编程总结
- 数据库第一章理论知识总结
- jade模板引擎使用记录
- Kinect开发:OpenNI2简介、安装与VS开发环境配置
- 学习StringUtils工具类—核心API
- javax.servlet.jsp.JspException cannot be resolved to a type的解决方法
- push到github时,每次都要输入用户名和密码的问题
- 循环语句(while语句和do...while语句)
- C# break,continue,return
- 转换流的使用(InputStreamReader,OutputStreamWriter)
- <LeetCode OJ> Same Tree【100】