程序所需资源 http://pan.baidu.com/s/1pLwGmMZ
代码框架
程序效果
一丶创建应用
创建一个新应用需要这三样东西,具体如何获得请往下看
获得 开发版SHA1
出现输入秘钥口令后按下回车即可
复制SHA1YESHI1按下回车即可
开发版SHA1为 EA:F4:F3:B1:2E:F2:4B:16:87:82:96:75:68:D4:EC:CE:D9:23:8E:88
获得 发布版SHA1
用一个小程序可以非常方便的获得发布版SHA1
获得的信息如下
应用名 -> baiduMapDemo
版本号 -> 1.0(1)
包名 -> com.dubuwucool.baidumapdemo
SHA1 -> EA:F4:F3:B1:2E:F2:4B:16:87:82:96:75:68:D4:EC:CE:D9:23:8E:88
key(ak) ->
发布版SHA1为EA:F4:F3:B1:2E:F2:4B:16:87:82:96:75:68:D4:EC:CE:D9:23:8E:88
通常情况下发布版SHA1和开发版SHA1是一致的
获得包名com.dubuwucool.baidumapdemo
注意:用上一步的软件或清单文件都可以获取包名,但从gradle文件中获取更为稳妥
具体创建过程如下
完成后获得key值 a5dkzXGjAlMhVBzaDxxe4w6o0I4hMzYh
验证key是否能用
二丶下载sdk并进行相关配置
选择所需功能并下载
下载完成后解压,并将libs文件夹下的所有文件粘贴到程序下的libs文件夹
完成后在gradle文件进行修改
完成后点击右上角的同步,框架中出现jniLibs文件夹并且代码中有提示则导入成功
三丶创建MyApplication类
/**
* function:
因为
sdk
各功能组件使用之前需要调用
SDKInitializer.initialize(
上线文
)
* 所以把该方法放在 Application 的初始化方法中 , 新建一个类继承 Application
* 并在清单文件进行配置 android:name=".MyApplication"
* 之后覆写 onCreate 方法 , 进行初始化
*/
public class MyApplication extends Application {
@Override
public void onCreate() {
* 所以把该方法放在 Application 的初始化方法中 , 新建一个类继承 Application
* 并在清单文件进行配置 android:name=".MyApplication"
* 之后覆写 onCreate 方法 , 进行初始化
*/
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
//
注册一个
key
验证是否是正确的广播所有者
,
我们在开发时经常有一些验证
,
比如验证网络等
// 创建一个 BroadcastReceiver 的内部类
BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// 得到系统传过来的 String 值
String s = intent.getAction();
// 创建空的字符串
String msg = null;
// 判断字符串是否相同
if (s.equals(SDKInitializer. SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_OK)) {
msg = " 验证 key 成功 ";
} else if (s.equals(SDKInitializer. SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR)) {
msg = " 验证 key 失败 ";
} else if (s.equals(SDKInitializer. SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR)) {
msg = " 网络连接失败 ";
}
Toast. makeText(MyApplication. this, msg, Toast. LENGTH_SHORT).show();
}
};
// 代码进行广播注册 , 也可在清单文件中注册
IntentFilter filter = new IntentFilter();
// 添加过滤条件
filter.addAction(SDKInitializer. SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR);
filter.addAction(SDKInitializer. SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR);
filter.addAction(SDKInitializer. SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_OK);
// 进行广播注册
registerReceiver(broadcastReceiver,filter);
// 创建一个 BroadcastReceiver 的内部类
BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// 得到系统传过来的 String 值
String s = intent.getAction();
// 创建空的字符串
String msg = null;
// 判断字符串是否相同
if (s.equals(SDKInitializer. SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_OK)) {
msg = " 验证 key 成功 ";
} else if (s.equals(SDKInitializer. SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR)) {
msg = " 验证 key 失败 ";
} else if (s.equals(SDKInitializer. SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR)) {
msg = " 网络连接失败 ";
}
Toast. makeText(MyApplication. this, msg, Toast. LENGTH_SHORT).show();
}
};
// 代码进行广播注册 , 也可在清单文件中注册
IntentFilter filter = new IntentFilter();
// 添加过滤条件
filter.addAction(SDKInitializer. SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR);
filter.addAction(SDKInitializer. SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR);
filter.addAction(SDKInitializer. SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_OK);
// 进行广播注册
registerReceiver(broadcastReceiver,filter);
//初始化百度地图
SDKInitializer.
initialize(getApplicationContext());
}
}
}
四丶修改清单文件
1.添加权限
2.配置MyApplication
3. 百度地图用到的Values值
<?
xml version=
"1.0"
encoding=
"utf-8"
?>
< manifest xmlns: android = "http://schemas.android.com/apk/res/android"
package= "com.dubuwucool.baidumapdemo">
< uses-permission android :name= "com.android.launcher.permission.READ_SETTINGS" />
<!-- 这个权限用于进行网络定位 -->
< uses-permission android :name= "android.permission.ACCESS_COARSE_LOCATION" />
<!-- 这个权限用于访问 GPS 定位 -->
< uses-permission android :name= "android.permission.ACCESS_FINE_LOCATION" />
<!-- 用于访问 wifi 网络信息, wifi 信息会用于进行网络定位 -->
< uses-permission android :name= "android.permission.ACCESS_WIFI_STATE" />
<!-- 获取运营商信息,用于支持提供运营商信息相关的接口 -->
< uses-permission android :name= "android.permission.ACCESS_NETWORK_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.INTERNET" />
< application
android :allowBackup= "true"
android :icon= "@mipmap/ic_launcher"
android :label= "@string/app_name"
android :supportsRtl= "true"
android :theme= "@style/AppTheme"
< manifest xmlns: android = "http://schemas.android.com/apk/res/android"
package= "com.dubuwucool.baidumapdemo">
< uses-permission android :name= "com.android.launcher.permission.READ_SETTINGS" />
<!-- 这个权限用于进行网络定位 -->
< uses-permission android :name= "android.permission.ACCESS_COARSE_LOCATION" />
<!-- 这个权限用于访问 GPS 定位 -->
< uses-permission android :name= "android.permission.ACCESS_FINE_LOCATION" />
<!-- 用于访问 wifi 网络信息, wifi 信息会用于进行网络定位 -->
< uses-permission android :name= "android.permission.ACCESS_WIFI_STATE" />
<!-- 获取运营商信息,用于支持提供运营商信息相关的接口 -->
< uses-permission android :name= "android.permission.ACCESS_NETWORK_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.INTERNET" />
< application
android :allowBackup= "true"
android :icon= "@mipmap/ic_launcher"
android :label= "@string/app_name"
android :supportsRtl= "true"
android :theme= "@style/AppTheme"
android:name=".MyApplication">
<!--
这里的值就是创建应用时的
key
值
-->
<
meta-data
android :name= "com.baidu.lbsapi.API_KEY"
android :name= "com.baidu.lbsapi.API_KEY"
android:value="a5dkzXGjAlMhVBzaDxxe4w6o0I4hMzYh
" />
<
activity
android
:name=
".MainActivity">
< intent-filter>
< action android :name= "android.intent.action.MAIN"/>
< category android :name= "android.intent.category.LAUNCHER"/>
</ intent-filter>
</ activity>
< intent-filter>
< action android :name= "android.intent.action.MAIN"/>
< category android :name= "android.intent.category.LAUNCHER"/>
</ intent-filter>
</ activity>
</application>
</
manifest>
五丶主窗体布局及代码
<?
xml version=
"1.0"
encoding=
"utf-8"
?>
< 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"
tools :context= "com.dubuwucool.baidumapdemo.MainActivity">
< 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"
tools :context= "com.dubuwucool.baidumapdemo.MainActivity">
<!--用来显示地图-->
<
com.baidu.mapapi.map.MapView
android :id= "@+id/mapView"
android :layout_width= "match_parent"
android :layout_height= "match_parent"></ com.baidu.mapapi.map.MapView>
</ RelativeLayout>
android :id= "@+id/mapView"
android :layout_width= "match_parent"
android :layout_height= "match_parent"></ com.baidu.mapapi.map.MapView>
</ RelativeLayout>
主窗体代码
public class MainActivity
extends AppCompatActivity {
private MapView mapView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout. activity_main);
initView();
// 设置是否显示比例尺
mapView.showScaleControl( false);
// 设置是否显示缩放按钮
mapView.showZoomControls( true);
}
private void initView() {
mapView = (MapView) findViewById(R.id. mapView);
}
}
private MapView mapView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout. activity_main);
initView();
// 设置是否显示比例尺
mapView.showScaleControl( false);
// 设置是否显示缩放按钮
mapView.showZoomControls( true);
}
private void initView() {
mapView = (MapView) findViewById(R.id. mapView);
}
}