Android--------------百度地图
1.首先注册一个百度地图开发者账号,获取**
Key的申请地址为:http://lbsyun.baidu.com/apiconsole/key
官方介绍申请**网址为:http://lbsyun.baidu.com/index.php?title=androidsdk/guide/key
获取开发版SHA1的方法:
第1步:运行进入控制台
第2步:定位到.android文件夹下,输入cd .android
第3步:输入keytool -list -v -keystore debug.keystore,会得到三种指纹证书,选取SHA1类型的证书(**口令是android),例如:
其中keytool为jdk自带工具;keystorefile为Android 签名证书文件
2.得到发布版SHA1**
第一步:打开Android studio 找到 Build------Generate Signed APK...---------------Create new(选择好生成Key的jks文件路径,方便获取**)------------选择APK所在的路径为该项目build下的outputs文件夹,选择release发布版,点击完成既可。
第二部:通过命令行根据刚才生成Key的jks文件路径获得**:keytool -v -list -keystore 文件名 (自己定义好的.jks文件名),你要口令为第一步设置的密码。
在百度地图创建应用时 应用名称为:values------strings里面的应用名称名;包名为build.gradle里面的包名。
3.提交百度地图的创建应用可以得到最后想要得到的AK
4.配置环境及发布
第一步:在百度地图开放平台的相关下载去下载Android地图SDK。
第二步:把下载下来的各个文件粘贴到Android studio的libs包下,工程配置还需要把jar包集成到自己的工程中,如图上图所示,放入libs目录下。对于每个jar文件,右键-选择Add As Library,导入到工程中。对应在build.gradle生成工程所依赖的jar文件说明
5.在AndroidManifest中添加开发**、所需权限等信息:
1)在application中添加开发**
<meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="创建完百度地图应用后得到的AK值" />
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" /> 3)在build.gradle中的buildTypes中加入:
sourceSets { main() { jniLibs.srcDirs = ['libs'] } }
3)在布局xml文件中添加地图控件;
<com.baidu.mapapi.map.MapView android:id="@+id/bmapView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:clickable="true" />
public class MainActivityextends 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的初始化方法中
5)创建地图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();
}
}
6.完成以上步骤就可以展示出一个基本的地图
----------------------------------------------------------------------------------------------------------
定位:
参考文档:http://blog.****.net/ssh159/article/details/68940607?locationNum=10&fps=1
private static final String TAG ="////////" ;
private MapView bmapView;
private BaiduMap mBaiduMap;
private LocationClient mLocClient;
private boolean isFirstLoc = true;
public MyLocationListenner myListener = new MyLocationListenner();
private String addrStr;
private TextView hello;
/**
* 定位SDK监听函数
*/
public class MyLocationListenner implements BDLocationListener {
@Override
public void onReceiveLocation(BDLocation location) {
// map view 销毁后不在处理新接收的位置
if (location == null || bmapView == 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());
MapStatus.Builder builder = new MapStatus.Builder();
builder.target(ll).zoom(18.0f);
mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));
}
if (mLocClient.isStarted()) {
// 获得位置之后停止定位
Log.i(TAG, "address://///////" +location.getAddrStr() );
hello.setText(location.getAddrStr());
}
// addrStr = location.getAddrStr();
// hello.setText(addrStr);
Log.i(TAG, "address://////////////////////////////////////////////////////////" +location.getAddrStr() );
}
public void onReceivePoi(BDLocation poiLocation) {
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_main);
bmapView = (MapView) findViewById(R.id.bmapview);
hello = (TextView) findViewById(R.id.hello);
mBaiduMap = bmapView.getMap();
mBaiduMap.setMyLocationEnabled(true);
// 定位初始化
mLocClient = new LocationClient(this);
mLocClient.registerLocationListener(myListener);
LocationClientOption option = new LocationClientOption();
option.setOpenGps(true); // 打开gps
option.setCoorType("bd09ll"); // 设置坐标类型
option.setScanSpan(1000);
option.setIsNeedAddress(true); //可选,设置是否需要地址信息,默认不需要
mLocClient.setLocOption(option);
mLocClient.start();
}
@Override
protected void onDestroy() {
super.onDestroy();
//在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
bmapView.onDestroy();
}
@Override
protected void onResume() {
super.onResume();
//在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
bmapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
//在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
bmapView.onPause();
}