一个抽取百度定位的教程(下载百度地图Demo+配置+抽取)
效果展示
已经下载Demo的可以直接到第五步,已经配置好的并可以运行的可以直接到第七步。
1.在浏览器搜索 ” 百度定位API “,点击下面这个链接
2.翻到最下面找到并点击 ” Android定位SDK “
3.在左侧导航找到 " 产品下载"
4.点击DEMO下载,这个DEMO就开始下载了
5.从文件夹打开并解压
6.此时的文件还不能用自己的Android Atudio打开,需要配置一些参数
7.可以此时项目能够打开,但是要实现定位功能还需要获取ak鉴权
从16分56秒开始 ak鉴权获取教程
获取SHA1代码
- public static String sHA1(Context context) {
- try {
- PackageInfo info = context.getPackageManager().getPackageInfo(
- context.getPackageName(), PackageManager.GET_SIGNATURES);
- byte[] cert = info.signatures[0].toByteArray();
- MessageDigest md = MessageDigest.getInstance("SHA1");
- byte[] publicKey = md.digest(cert);
- StringBuffer hexString = new StringBuffer();
- for (int i = 0; i < publicKey.length; i++) {
- String appendString = Integer.toHexString(0xFF & publicKey[i])
- .toUpperCase(Locale.US);
- if (appendString.length() == 1)
- hexString.append("0");
- hexString.append(appendString);
- hexString.append(":");
- }
- String result = hexString.toString();
- System.out.println("SHA1:"+result);
- return result;
- } catch (PackageManager.NameNotFoundException e) {
- e.printStackTrace();
- } catch (NoSuchAlgorithmException e) {
- e.printStackTrace();
- }
- return null;
- }
8.Android Atudio打开文件后就可以正常运行啦
9.抽取上面提到的功能
通过MainActivity.java找到需要实现的功能的代码
然后将lib文件夹、servlet文件夹、LocationService.java、AndroidManifest.xml复制到自己的项目中,调试一下基本就可以运行了。
10.代码
MainActivity.java
- import androidx.appcompat.app.AppCompatActivity;
- import android.Manifest;
- import android.annotation.TargetApi;
- import android.content.SharedPreferences;
- import android.content.pm.PackageManager;
- import android.os.Build;
- import android.os.Bundle;
- import android.text.method.ScrollingMovementMethod;
- import android.view.View;
- import android.widget.ArrayAdapter;
- import android.widget.Button;
- import android.widget.ListView;
- import android.widget.TextView;
- import com.baidu.baidulocationdemo.R;
- import com.baidu.location.BDAbstractLocationListener;
- import com.baidu.location.BDLocation;
- import com.baidu.location.Poi;
- import com.baidu.location.PoiRegion;
- import com.example.locationdemo.service.LocationService;
- import java.util.ArrayList;
- public class MainActivity extends AppCompatActivity {
- private final int SDK_PERMISSION_REQUEST = 127;
- private LocationService locationService;
- private String permissionInfo;
- private TextView LocationResult;
- private Button startLocation;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- // sHA1(this); //获取AK
- getPersimmions(); //获取定位权限
- LocationResult = (TextView) findViewById(R.id.locationResult);
- startLocation = (Button) findViewById(R.id.startLocation);
- initUiti();
- }
- private void initUiti() {
- startLocation.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- locationService.start();
- }
- });
- }
- protected void onStart() {
- // TODO Auto-generated method stub
- super.onStart();
- // -----------location config ------------
- locationService = ((LocationApplication) getApplication()).locationService;
- //获取locationservice实例,建议应用中只初始化1个location实例,然后使用,可以参考其他示例的activity,都是通过此种方式获取locationservice实例的
- locationService.registerListener(mListener);
- //注册监听
- int type = getIntent().getIntExtra("from", 0);
- if (type == 0) {
- locationService.setLocationOption(locationService.getDefaultLocationClientOption());
- } else if (type == 1) {
- locationService.start();
- }
- startLocation.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- if (startLocation.getText().toString().equals("开始定位")) {
- locationService.start();// 定位SDK
- // start之后会默认发起一次定位请求,开发者无须判断isstart并主动调用request
- startLocation.setText("停止定位");
- } else {
- locationService.stop();
- startLocation.setText("开始定位");
- }
- }
- });
- }
- /***
- * Stop location service
- */
- @Override
- protected void onStop() {
- // TODO Auto-generated method stub
- locationService.unregisterListener(mListener); //注销掉监听
- locationService.stop(); //停止定位服务
- super.onStop();
- }
- private final BDAbstractLocationListener mListener = new BDAbstractLocationListener() {
- @Override
- public void onReceiveLocation(BDLocation location) {
- if (null != location && location.getLocType() != BDLocation.TypeServerError) {
- if(location.getAddrStr()!=null){
- LocationResult.setText(location.getAddrStr());
- locationService.stop();
- }
- }
- }
- };
- @TargetApi(23)
- private void getPersimmions() {
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
- ArrayList<String> permissions = new ArrayList<String>();
- /***
- * 定位权限为必须权限,用户如果禁止,则每次进入都会申请
- */
- // 定位精确位置
- if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
- permissions.add(Manifest.permission.ACCESS_FINE_LOCATION);
- }
- if (checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
- permissions.add(Manifest.permission.ACCESS_COARSE_LOCATION);
- }
- /*
- * 读写权限和电话状态权限非必要权限(建议授予)只会申请一次,用户同意或者禁止,只会弹一次
- */
- // 读写权限
- if (addPermission(permissions, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
- permissionInfo += "Manifest.permission.WRITE_EXTERNAL_STORAGE Deny \n";
- }
- if (permissions.size() > 0) {
- requestPermissions(permissions.toArray(new String[permissions.size()]), SDK_PERMISSION_REQUEST);
- }
- }
- }
- @TargetApi(23)
- private boolean addPermission(ArrayList<String> permissionsList, String permission) {
- // 如果应用没有获得对应权限,则添加到列表中,准备批量申请
- if (checkSelfPermission(permission) != PackageManager.PERMISSION_GRANTED) {
- if (shouldShowRequestPermissionRationale(permission)) {
- return true;
- } else {
- permissionsList.add(permission);
- return false;
- }
- } else {
- return true;
- }
- }
- public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
- // TODO Auto-generated method stub
- super.onRequestPermissionsResult(requestCode, permissions, grantResults);
- }
- /* public static String sHA1(Context context) {
- try {
- PackageInfo info = context.getPackageManager().getPackageInfo(
- context.getPackageName(), PackageManager.GET_SIGNATURES);
- byte[] cert = info.signatures[0].toByteArray();
- MessageDigest md = MessageDigest.getInstance("SHA1");
- byte[] publicKey = md.digest(cert);
- StringBuffer hexString = new StringBuffer();
- for (int i = 0; i < publicKey.length; i++) {
- String appendString = Integer.toHexString(0xFF & publicKey[i])
- .toUpperCase(Locale.US);
- if (appendString.length() == 1)
- hexString.append("0");
- hexString.append(appendString);
- hexString.append(":");
- }
- String result = hexString.toString();
- System.out.println("SHA1:"+result);
- return result;
- } catch (PackageManager.NameNotFoundException e) {
- e.printStackTrace();
- } catch (NoSuchAlgorithmException e) {
- e.printStackTrace();
- }
- return null;
- }
- */
- }
activity_main.xml
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical">
- <TextView
- android:id="@+id/locationResult"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="Hello World!"
- app:layout_constraintLeft_toLeftOf="parent"
- app:layout_constraintRight_toRightOf="parent"
- app:layout_constraintTop_toTopOf="parent" />
- <Button
- android:id="@+id/startLocation"
- android:text="开始定位"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- app:layout_constraintBottom_toBottomOf="parent"
- app:layout_constraintLeft_toLeftOf="parent"
- app:layout_constraintRight_toRightOf="parent"
- app:layout_constraintTop_toTopOf="parent"/>
- </LinearLayout>
AndroidManifest.xml
- <?xml version="1.0" encoding="utf-8"?>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.baidu.baidulocationdemo">
- <!-- 这个权限用于进行网络定位-->
- <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"/>
- <!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
- <uses-permission android:name="android.permission.CHANGE_WIFI_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.READ_LOGS"/>
- <!-- 允许访问振动设备 -->
- <uses-permission android:name="android.permission.VIBRATE"/>
- <!-- 允许使用PowerManager的 WakeLocks保持进程在休眠时从屏幕消失 -->
- <uses-permission android:name="android.permission.WAKE_LOCK"/>
- <!-- 允许程序读取或写入系统设置 -->
- <uses-permission android:name="android.permission.WRITE_SETTINGS"/>
- <!-- android 9.0上使用前台服务,需要添加权限 -->
- <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
- <!-- 用于读取手机当前的状态 -->
- <uses-permission android:name="android.permission.READ_PHONE_STATE" />
- <!-- 读取缓存数据 -->
- <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
- <!-- 获取模拟定位信息 -->
- <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"/>
- <application
- android:requestLegacyExternalStorage="true"
- android:name="com.example.locationdemo.LocationApplication"
- 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">
- <!-- 声明service组件 -->
- <service
- android:name="com.baidu.location.f"
- android:enabled="true"
- android:process=":remote"/>
- <!-- AK鉴权 -->
- <meta-data
- android:name="com.baidu.lbsapi.API_KEY"
- android:value="2N8xydK1CHyShBGxYhMkzTP0jRsVv9Lh" /> <!-- http://lbsyun.baidu.com/apiconsole/key -->
- <activity
- android:name="com.example.locationdemo.MainActivity">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- </application>
- </manifest>
一个抽取百度定位的教程(下载百度地图Demo+配置+抽取)的更多相关文章
- Mac使用Aria2下载百度网盘,突破下载限速的方法教程
百度网盘目前可以说是在国内网盘环境中一枝独秀,日常使用触及在所难免,尤其是对于喜欢下载资源的朋友来说,但是一些限制让它的使用越来越难,尤其是下载速度,普通用户的下载往往远低于自己的预期,特别是对于 M ...
- IDM使用教程:利用IDM下载百度网盘文件
IDM是什么 其实我使用IDM下载器只是为了方便网页版百度网盘直接下载大于40M文件而已,大家知道文件过大必须打开客户端才能下载,这点对于我的破电脑感觉很烦躁,每次要等待它慢悠悠打开,然后动用我的超级 ...
- ECSHOP安装百度编辑UEditor教程
ECSHOP系统自带的编辑器大家用过都知道,难用不说,还不能批量上传图片.很多朋友都喜欢百度编辑器,因为百度编辑器功能强大,使用方便,而且不会生成太多多余代码.网上有许多ECSHOP整合百度编辑器的教 ...
- 基于百度定位及天气获取的DEMO
demo基于百度定位APIv4.0版.新浪天气(不用查询城市代码). 需求: 1.button实现触发定位监听和天气捕获 2.两个textview 分别显示详细地址.天气. 界面很简陋,侧重功能实现. ...
- Android使用百度定位SDK 方法及错误处理
之前我的项目中的位置定位使用的是基站方法,使用的Google提供的API,但是前天中午突然就不返回数据了,到网上搜了一下才知道,Google的接 口不提供服务了,基于时间紧迫用了百度现有的SDK,但是 ...
- Android使用百度定位SDK方法及错误处理
下面事例是使用Android平台的部分代码.对于这个平台百度的开放人员已经写了完整的demo,把工程导入到eclipse中之后一般没有错误,如果报错的话,eclipse也会给出提示.一般可以通过将pr ...
- Android 百度定位SDKv4.2及6.0_百度定位实例_安卓定位实例
介绍 由于项目需要.前几天一直在研究百度定位的功能.通过不断的实践终于有结果了.不愿意独享 现在我把我的研究成果和大家分享一下.其实百度的 API 已经相当不错了 这之所以要写出来.一是自己做一个笔记 ...
- Android定位开发之百度定位、高德定位、腾讯定位,三足鼎立一起为我所用!
这几天的项目不是非常紧.于是想为未来可能要做的项目做一些技术储备. 下一个项目非常有可能是定位开发,须要用到手机定位功能,于是查了查如今比較流行的第三方定位,最火的基本上就是百度定位>高德定位& ...
- 百度定位SDK 返回error code : 162 latitude : 4.9E-324 lontitude : 4.9E-324
Android应用使用百度定位SDK 返回error code : 162 latitude : 4.9E-324 lontitude : 4.9E-324 在使用百度定位SDK时遇到一个非常郁闷的问 ...
随机推荐
- HDFS连接JAVA,HDFS常用API
先在pom.xml中导入依赖包 <dependencies> <!-- https://mvnrepository.com/artifact/org.apache.hadoop/ha ...
- (数据科学学习手札134)pyjanitor:为pandas补充更多功能
本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 pandas发展了如此多年,所包含的功能已 ...
- 使用 Fiddler 进行 iOS 抓包
使用 Fiddler(下载) 进行 iOS 抓包,具体步骤如下: 安装并配置 Fidder 安装并打开 Fiddler, 点击 Tools -> Fiddler Options 选中 Decrp ...
- DBScan聚类,打破形状的限制,使用密度聚类
如何用花盆摆放成国庆字,并且包围这两个字. 在DBSCAN中衡量密度主要使用的指标:半径.最少样本量 算法原理 *直接密度可达 如果一个点在核心对象的半径区域内,那么这个点和核心对象称为直接密度可达, ...
- promise 理解与总结
对Promise的理解 Promise是异步编程的一种解决方案,可以获取异步操作的消息,避免了地狱回调,它比传统的解决方案回调函数和事件更合理和更强大. 所谓Promise,简单说就是一个容器,里面保 ...
- mysql使用group by分组时出现错误ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and
问题: 1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column ...
- HTML 基础及超链接练习
实验一:HTML 基础及超链接练习 实验目的: 熟悉 HTML 基础及超链接的使用 实验要求: 1.建立至少 3 个以上的网页: 2.实现任意两网页之间的跳转(建议做个导航菜单): 3.每个网页里面至 ...
- Linux-centos7安装mysql步骤
原文地址:https://blog.csdn.net/qq_42467339/article/details/89471395 Centos7.3 yum安装MySQL5.7.25 扩展:在CentO ...
- docker 部署mysql tomcat时 在root@localhost~下——-——docker exec -it 容器名 /bin/bash 报错
在docker部署mysql时 报错 找不到 容器不自动启动 , docker start 容器名 也没有效果 多次尝试发现 原因是创建容器时在 下面创建的 更改为下创建 问题解决
- VuePress 博客之 SEO 优化(六)站长工具
前言 在 <一篇带你用 VuePress + Github Pages 搭建博客>中,我们使用 VuePress 搭建了一个博客,最终的效果查看:TypeScript 中文文档. 本篇接着 ...