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支持.但由于众所周知的原 ...
随机推荐
- LDAP Browser/Editor v2.8.2
https://www.netiq.com/communities/cool-solutions/wp-content/uploads/sites/2/2009/07/Gawor_ldapbrowse ...
- Json入门 分类: C_OHTERS 2014-04-23 16:20 601人阅读 评论(0) 收藏
参考<疯狂android讲义>>730页 JSON的基础请参考W3SCHOOL的教程: http://www.w3school.com.cn/json/index.asp 例子: h ...
- Android 在Service里面启动Activity
直接在代码: Intent dialogIntent = new Intent(getBaseContext(), YourActivity.class); dialogIntent.addFlags ...
- 序列 mysql
CREATE TABLE emp_seq (seq INT); INSERT INTO emp_seq VALUES(0); UPDATE emp_seq SET seq = LAST_INSERT_ ...
- [Vue] Parent and Child component communcation
By building components, you can extend basic HTML elements and reuse encapsulated code. Most options ...
- win7注册表常用设置
win7注册表常用设置 一.总结 一句话总结:regedit可以修改很多东西,电脑时间,背景,u盘读写,鼠标右键情况. 二.win7注册表常用设置 一. 秀出自我风格的屏幕保护画面 1.气泡屏幕保护 ...
- Java8学习之旅2---基于Lambda的JDBC编程
Java8的Lambda表达式确实是一个很好的特性.可是在哪些场合下使用.事实上还是须要细致考虑的.我们当然不能为了使用而使用,而是须要找到切实实用的场合.在JDBC编程中,比如查询语句,首先须要进行 ...
- 【hdu 1846】Brave Game
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s) ...
- 【codeforces 765A】Neverending competitions
[题目链接]:http://codeforces.com/contest/765/problem/A [题意] 给你一个人的n个行程 行程都是从家到某个地方或从某个地方到家; 且是无序的,且如果到了非 ...
- spark 2.0.2 集群搭建
由于之前已经搭建过hadoop相关环境,现在搭建spark的预备工作只有scala环境了 一,配置scala环境 1.解压tar包后,编辑/etc/profile 2.source /etc/prof ...