Android初级开发(十)——百度定位—确定你的位置
来源:互联网 发布:微信 for mac 2.2 dmg 编辑:程序博客网 时间:2024/06/06 00:10
一、申请API Key
1、登录百度账号,打开http://developer.baidu.com/user/reg这个网址,填注册信息,按照提示完成注册。
2、打开http://lbsyun.baidu.com/apiconsole/key这个地址点击创建应用,应用类型选择Android SDK,启用服务保持默认。发布版SHAI指的是打包程序时所用签名文件的SHAI指纹,打开Android Studio的任意一个项目,点击右侧工具栏Gradle——项目名——:app——Tasks——android,这里展示了一个Android Studio项目中所有内置的Gradle Tasks,其中signingReport这个Task就可以用来查看签名文件信息。双击signingReport,其中SHAI就是我们所需的SHAI指纹。包名自己命名吧,点击提交,应用就创建成功了。访问应用(AK)出现的就是我们申请的API Key。
二、准备LBS SDK
1、下载LBS开放平台中提供的SDK 打开地址http://lbsyun.baidu.com/sdk/download ,本例中用到基础地图和定位功能这两个SDK
2、将下载的文件解压,将BaiduLBS_Android.jar复制到app模块下面的libs目录下,然后点击Android Studio顶部工具栏的Sync按钮,使我们复制的jar包引用进来。
点击Sync按钮之后,libs目录下的jar文件就会多出一个向右的箭头,这就表示项目已经能够引用到这些Jar包了
3、在src/main目录下,右键——New——Directory,创建一个名为jniLibs的目录,把压缩包中的so文件全部复制到这里。
三、编码
1、写个布局
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:id="@+id/position_text_view" android:layout_width="wrap_content" android:layout_height="wrap_content" /></LinearLayout>
就是一个TextView用于显示获取到的信息
2、AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.administrator.lbstest"> **<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <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"/> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> <uses-permission android:name="android.permission.WAKE_LOCK"/>** <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> **<meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="rU852fcpod6KOXM1NKMEICwQIYPUqOpO"/>** <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> **<service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote"/>** </application></manifest>
首先添加权限,然后在标签内添加一个
public class MainActivity extends AppCompatActivity { public LocationClient mLoacationClient; private TextView positionText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //创建一个LocationClient的实例,接受一个Context参数 mLoacationClient = new LocationClient(getApplicationContext()); //调用LocationClient的registerLocationListener()方法注册一个定位监听器 //当获取到位置信息时,就会回调这个定位监听器 mLoacationClient.registerLocationListener(new MyLocationListener()); setContentView(R.layout.activity_main); positionText = (TextView) findViewById(R.id.position_text_view); //创建一个空的List集合 //依次判断这3个权限有没有被授权,如果没有被授权就添加到List集合中 List<String> permissionList = new ArrayList<>(); if(ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION)!= PackageManager.PERMISSION_GRANTED){ permissionList.add(Manifest.permission.ACCESS_FINE_LOCATION); } if(ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.READ_PHONE_STATE)!=PackageManager.PERMISSION_GRANTED){ permissionList.add(Manifest.permission.READ_PHONE_STATE); } if(ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.WRITE_EXTERNAL_STORAGE)!=PackageManager.PERMISSION_GRANTED){ permissionList.add(Manifest.permission.WRITE_EXTERNAL_STORAGE); } //将List转换成数据 //调用ActivityCompat。requestPermissions()方法一次性申请 if(!permissionList.isEmpty()){ String[] permissions = permissionList.toArray(new String[permissionList.size()]); ActivityCompat.requestPermissions(MainActivity.this,permissions,1); }else{ requestLocation(); } } //开始地理位置定位 private void requestLocation() { //更新地理位置 initLocation(); //调用LocationClient的start()方法开始定位 //定位的结果会回调到前面注册的监听器中 mLoacationClient.start(); } private void initLocation() { //创建一个LocationClientOption对象 LocationClientOption option = new LocationClientOption(); //设置更新的间隔,单位毫秒 option.setScanSpan(5000); //表示我们需要获取当前位置的详细地址信息 option.setIsNeedAddress(true); mLoacationClient.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; } } requestLocation(); }else { Toast.makeText(this, "发生未知错误", Toast.LENGTH_SHORT).show(); finish(); } break; default: } } public class MyLocationListener implements BDLocationListener{ @Override public void onReceiveLocation(BDLocation location) { StringBuilder currentPosition = new StringBuilder(); currentPosition.append("纬度:").append(location.getLatitude()).append("\n"); currentPosition.append("经线:").append(location.getLongitude()).append("\n"); currentPosition.append("省:").append(location.getProvince()).append("\n"); currentPosition.append("市:").append(location.getCity()).append("\n"); currentPosition.append("区:").append(location.getDistrict()).append("\n"); currentPosition.append("街道:").append(location.getStreet()).append("\n"); currentPosition.append("定位方式:"); if(location.getLocType() == BDLocation.TypeGpsLocation){ currentPosition.append("GPS"); }else if(location.getLocType() == BDLocation.TypeNetWorkLocation){ currentPosition.append("网络"); } positionText.setText(currentPosition); } } @Override protected void onDestroy() { super.onDestroy(); //当活动被销毁的时候调用LocationClient的stop()方法来停止定位 mLoacationClient.stop(); }}
四、运行
因为我们设置了位置每5s的更新,所以当你移动位置的时候,数据也会随之改变
PS:在安装APK的时候出现如下错误
Installation failed with message INSTALL_PARSE_FAILED_MANIFEST_MALFORMED.
这是因为在清单文件中注册服务时,android:process = “:remote”中少了冒号
- Android初级开发(十)——百度定位—确定你的位置
- Android初级开发(十)——百度定位—在地图上显示你的位置
- Android——确定自己的位置(获得经纬度)
- Android版本百度地图开发(四)——定位
- Android版本百度地图开发(四)——定位
- <Web>地理定位API如何确定你的位置
- Android 百度地图(二)——地图切换、定位、添加覆盖物、搜索位置、连线
- android 百度地图定位开发之时时定位-位置获取
- Android百度地图,定位自己的位置。
- Android初级开发(十)——服务—下载实例
- Android位置服务--百度定位,获取自己的位置
- android百度地图开发——定位sdk
- 百度地图Android sdk开发笔记五修改定位位置的图标
- Android开发-百度地图API_v4.1.1-AndroidStudio(六)显示检索结果&定位&显示我的位置
- Android开发初级(三)——程序员的入门礼—属于你的HelloWorld小程序
- Android开发——百度地图定位返回4.9E324的解决方案
- Android 程序开发——百度地图的使用(三) 地图定位(定位+跟随+距离测量+地图自适应缩放)
- 案例二———百度地图上定位自己的位置
- 1001:害死人不偿命的(3n+1)猜想
- Commands for System Administration
- 什么是蒙特卡罗仿真?
- 浅谈java中的锁级别
- PHP链接mysql
- Android初级开发(十)——百度定位—确定你的位置
- PHP constant()函数
- JAVA设计模式(二十一)----访问者模式
- text()html() 以及 val() nnerHTML和innerTEXT的用法
- 尽量避免诸如x.read(new FileInputStream(sourceFile)); 的写法
- Spring MVC重定向无法实现页面跳转
- python学习之初始化实例、类属性、方法
- 有关SpringMVC-SSM整合开发跨域问题
- Altium Designer 导入DXF文件[转载]