Android学习-- 基于位置的服务 LBS(基于百度地图Android SDK)--定位SDK
原文:Android学习-- 基于位置的服务 LBS(基于百度地图Android SDK)--定位SDK
前两天学习了一下Android的特色--LBS(基于百度地图Android SDK)。有些坑还是得填下,避免以后用到时忘记了。
一 .申请API_KEY
1)http://lbsyun.baidu.com/ :在这里注册并申请。注册之后出现应用列表
2)选择创建应用:下图所示
PS:SHA1找了我好久
按照书上面的,资料上看了,左侧选择项目目录类型project,打开右侧Gradle–>app–>android–>signingReport,发现,诶,怎么没有。。。。(黑人问号脸??),突然发现左下角有个转换的键(左下标红的地方),一按。。。,答案出来了。
3)完成
创建完成,获得API_KEY。
二 .下载百度定位SDK
下载解压后得到libs文件夹
BaiduLBS_android.jar放在project目录下的app–>libs目录下,其他目录放在app–>main–>新建文件夹比如:jniLibs下
三 .使用百度地图
1) AndroidManifest.xml
添加如下权限
<!-- 这个权限用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<!-- 这个权限用于访问GPS定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<!-- 获取运营商信息,用于支持提供运营商信息相关的接口-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<!-- 用于读取手机当前的状态-->
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
<!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<!-- 访问网络,网络定位需要上网-->
<uses-permission android:name="android.permission.INTERNET" />
<!-- SD卡读取权限,用户写入离线定位数据-->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>
在Application标签中声明SERVICE组件,每个APP拥有自己单独的定位SERVICE
<service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote">
</service>
Android定位SDK4.2及之后版本需要在Mainfest.xml正确设置Accesskey(AK),如果设置错误将会导致定位和地理围栏服务无法正常使用。设置AK,在Application标签中加入
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="AK" /> //key:开发者申请的Key
2) 新建activity:LBSwithBaidu,LBSwithBaidu代码如下:
public class LBSwithBaidu extends AppCompatActivity {
private TextView text;
private LocationClient client;
private StringBuilder connrentPosition;
private MapView map;
private BaiduMap baidumap;
private boolean ismylocation=true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SDKInitializer.initialize(getApplicationContext());
client = new LocationClient(getApplicationContext());
client.registerLocationListener(new MylocationListener());
setContentView(R.layout.activity_lbswith_baidu);
text= (TextView) findViewById(R.id.textView_location);
map= (MapView) findViewById(R.id.mapwithbaidu);
baidumap=map.getMap();
baidumap.setMyLocationEnabled(true);
List<String> permission = new ArrayList<>();
if (ContextCompat.checkSelfPermission(LBSwithBaidu.this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
permission.add(Manifest.permission.ACCESS_FINE_LOCATION);
}
if (ContextCompat.checkSelfPermission(LBSwithBaidu.this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
permission.add(Manifest.permission.READ_PHONE_STATE);
}
if (ContextCompat.checkSelfPermission(LBSwithBaidu.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
permission.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
}
if (!permission.isEmpty()) {
String[] permissions = permission.toArray(new String[permission.size()]);
ActivityCompat.requestPermissions(LBSwithBaidu.this, permissions, 1);
} else {
requestion();
}
}
private void requestion() {
initlocation();
client.start();
}
private void initlocation() {
LocationClientOption option=new LocationClientOption();
option.setIsNeedAddress(true);
option.setScanSpan(5000);
client.setLocOption(option);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case 1:
if (grantResults.length > 0) {
for(int result:grantResults){
if(result!=PackageManager.PERMISSION_GRANTED){
Toast.makeText(this, "必须同意权限", Toast.LENGTH_SHORT).show();
finish();
return;
}
}
requestion();
}else {
Toast.makeText(this, "发生错误", Toast.LENGTH_SHORT).show();
}
break;
default:
}
}
public void nagativato(BDLocation bdLocation) {
if (ismylocation) {
LatLng ll = new LatLng(bdLocation.getLatitude(), bdLocation.getLongitude());
Log.d("pipa",bdLocation.getLatitude()+"::"+ bdLocation.getLongitude());
MapStatusUpdate updata = MapStatusUpdateFactory.newLatLng(ll);
baidumap.animateMapStatus(updata);
updata = MapStatusUpdateFactory.zoomTo(16f);
baidumap.animateMapStatus(updata);
ismylocation = false;
}
MyLocationData.Builder loBuilder=new MyLocationData.Builder().latitude(bdLocation.getLatitude())
.longitude(bdLocation.getLongitude());
MyLocationData locationData=loBuilder.build();
baidumap.setMyLocationData(locationData);
}
public class MylocationListener implements BDLocationListener {
@Override
public void onReceiveLocation(BDLocation bdLocation) {
if(bdLocation.getLocType()==BDLocation.TypeGpsLocation||bdLocation.getLocType()==BDLocation.TypeNetWorkLocation){
nagativato(bdLocation);
}
connrentPosition = new StringBuilder();
connrentPosition.append("纬度:").append(bdLocation.getLatitude()).append("\n");
connrentPosition.append("经度:").append(bdLocation.getLongitude()).append("\n");
connrentPosition.append("国家:").append(bdLocation.getCountry()).append("\n");
connrentPosition.append("省:").append(bdLocation.getProvince()).append("\n");
connrentPosition.append("市:").append(bdLocation.getCity()).append("\n");
connrentPosition.append("县:").append(bdLocation.getDistrict()).append("\n");
connrentPosition.append("街道:").append(bdLocation.getStreet()).append("\n");
connrentPosition.append("定位方式:");
if (bdLocation.getLocType() == BDLocation.TypeGpsLocation) {
connrentPosition.append("GPS");
} else if (bdLocation.getLocType() == BDLocation.TypeNetWorkLocation) {
connrentPosition.append("网络定位");
}
runOnUiThread(new Runnable() {
@Override
public void run() {
text.setText(connrentPosition);
}
});
}
@Override
public void onConnectHotSpotMessage(String s, int i) {
}
}
@Override
protected void onResume() {
super.onResume();
map.onResume();
}
@Override
protected void onPause() {
super.onPause();
map.onPause();
}
@Override
protected void onDestroy() {
super.onDestroy();
client.stop();
map.onDestroy();
baidumap.setMyLocationEnabled(false);
}
}
效果图:
Android学习-- 基于位置的服务 LBS(基于百度地图Android SDK)--定位SDK的更多相关文章
- Android学习之基础知识十四 — Android特色开发之基于位置的服务
一.基于位置的服务简介 LBS:基于位置的服务.随着移动互联网的兴起,这个技术在最近的几年里十分火爆.其实它本身并不是什么时髦的技术,主要的工作原理就是利用无线电通讯网络或GPS等定位方式来确定出移动 ...
- LBS(Location Based Service)(基于位置的服务)
LBS(Location Based Service)(基于位置的服务) Android 中定位方式基本可以分为两种:GPS定位,网络定位. GPS定位的工作原理是基于手机内置的GPS硬件直接和卫星进 ...
- LBS 基于位置的服务
LBS (Location Based Services)基于位置的服务 基于位置的服务,它是通过电信移动运营商的无线电通讯网络(如GSM网.CDMA网)或外部定位方式(如GPS)获取移动终端用户的位 ...
- 百度地图android客户端的AndroidMainfest.xml的学习和android版本号
平时写android产品相关的东西接触比较少,于是找个例子学习下. 众所周知,Apk文件是可以反编译的,虽然看不到代码,xml还是可见的. 把百度地图android客户端反编译之后,来学习下它的And ...
- 百度地图 Android SDK - 检索功能使用的简单演示样例
百度地图 SDK 不仅为广大开发人员提供了炫酷的地图展示效果.丰富的覆盖物图层,更为广大开发人员提供了多种 LBS 检索的能力. 通过这些接口,开发人员能够轻松的訪问百度的 LBS 数据,丰富自己的移 ...
- 百度地图 Android SDK - 新的版本号(v3.2.0)正式上线
百度地图 Android SDK v3.2.0 在版本号 2014 年 11 月 07 日本正式推出工作完成! watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQ ...
- 百度地图 Android SDK - Hello Baidu Map
例如,给广大以下主要开发者介绍了如何使用百度地图Android SDK构造的主应用程序的地图! 第一步.创建Androidproject,将百度地图Android SDK的开发包导入到project对 ...
- 百度地图 Android SDK - 标注(Marker)的基本使用
标注(Marker)是开发人员最常使用的地图覆盖物志一.今天就来向大家介绍一些标注(Marker)的最基本用法! 实现目标: 1.构建基础地图页面: 2.在地图的中心点处加入 Marker: 3.实现 ...
- 基于位置的服务——百度地图SDK练习
基于位置的服务所围绕的核心就是要先确定出用户所在的位置.通常有两种技术方式可以实现:一种是通过GPS定位,一种是通过网络定位.Android对这两种定位方式都提供了相应的API支持.但由于众所周知的原 ...
随机推荐
- 云应用开发之新浪SAE读写云端数据库MySQL
本博文为前篇博文新浪云应用SAE日志查看的延续. 在读写云数据库MySQL之前,须要说明的是,在新浪云平台上使用数据库时.该平台默认会为每个应用单独新建一个数据库database实例.在该实例中再创建 ...
- Eclipse下配置Ant脚本 自己主动打包带签名的Android apk
尽管eclipse非常少用了,可是在古老的项目上还是会用到.一个麻烦事是打带签名包的时候.非常不方便.下边纪录下配置ant,自己主动打包带签名apk的过程,作为备忘.(PC环境为MAC) 1,第一步得 ...
- 阿里云OSS工具类
[前言] 我们上家公司的存储系统用的是FastDFS(智能一代云平台(二十八):对前后端分离和FastDFS的使用的再理解):现在在职的公司用的是阿里云的OSS(OSS的官方文档),在工作的时候整理一 ...
- PatentTips - Method and system for browsing things of internet of things on ip using web platform
BACKGROUND The following disclosure relates to a method and system for enabling a user to browse phy ...
- 【9107】Hanoi双塔问题(NOIP2007)
Time Limit: 10 second Memory Limit: 2 MB 问题描述 给定A,B,C三根足够长的细柱,在A柱上放有2n个中间有孔的圆盘,共有n个不同的尺寸,每个尺寸都有两个相同的 ...
- Android 让文本输入框默认不获取焦点
项目中有个检索功能,页面上有个EditText输入框,打开页面后,焦点默认在EditText上,这样的话软键盘默认就会显示出来,占据大半个屏幕. 后来想办法将这个给去掉了,原先考虑着将焦点赋给页面上的 ...
- ITFriend创业败局(五):创业可以停止,公司必须注销,不然后果很严重
马上又要继续出来创业做事了,想到要注册公司,有个麻烦事. 事情得回到2014年9月. 当时,由于各种因素,决定放弃ITFriend,当然也放弃了原来了公司.先是,咨询了横德瑞的陈总,关于公司注销的事. ...
- 前端调用百度API
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...
- android应用开发 button显示两行文本
自己写了个电话拨号器的程序给男朋友玩,用来专门打我的手机号,为了把界面做的好看一点,须要用到显示两行文本的button.在网上搜罗了两种方法,记录在以下.跟大家一起分享一下,希望能帮到须要的人. 方法 ...
- 轮询方法FileSystemWatcher
具体实现 FileSystemWatcher watcher = new FileSystemWatcher(WriteBackDir, "*result.txt"); watch ...