android学习:初学百度地图编程

百度地图开发入门(1):案例 将我之前的百度地图入门的一些博文分享一下,这里主要系统讲解地图可视化的开发方式具体可以参考这里:https://lbsyun.baidu.com/index.php?title=jspopularGL/guide/getkey最后当你的应用创建好了,就会得到一个服务密钥然后这里是百度地图的API:https://mapopen-pub-jsapi.bj.bcebos.com/jsapi/reference/jsapi_webgl_1_0.html第一步是需要显示出地图,这里我们使用html原生方式来讲解 以 阅读详情

    相信对于每个IT人士来说,android的编程大家并不陌生。简单的编程方法这里不赘述。

    笔者在实际应用中,运用到百度地图的相关编程,之所以选择百度而不选择谷歌地图,这个大家都懂的。


    查阅了很多资料,尤其是这篇文章给我的收获较大:http://blog.youkuaiyun.com/xiaanming/article/details/11171581,以下简称“原始教程”。

但是当笔者按照文章的代码运行的时候,却无意外的奔溃。于是结合百度官方提供的例子(官方提供的例子较为复杂),自己完成了百度地图初级的调用,写下此文章,供初学百度地图的朋友们参考。


一 申请API

    这个是必须的第一步,网址:http://lbsyun.baidu.com/apiconsole/key,也很简单,只要注册一个百度账号,申请一下就可以了

   如图,笔者已经创建了两个应用(百度的规则是一个AK对应一个应用),如果想要创建新的应用,只要点击创建应用就可以了,服务器端的AK是系统自动生成的。


应用名称就填写你所创建应用的名称,笔者这里用smartHome代替,应用类型就选择for Mobile(其他选项没试过),主要就是安全码这个东西,官方的解释是Android签名证书的证书指纹 (SHA1)值 + “;” + 你的应用程序包名,这两个东西如何获取呢:

1.签名证书指纹,在你所使用的eclipse下的:winows -> preferance -> android -> build中即可查看

2.应用程序包名:这个大多数教程解释的比较模糊,其实就是eclipse建立好工程之后,在Andoirdmanifest.xml文件中packet所对应的值,注意是双引号里面的值,不包括双引号,切记!

二.下载百度API的库

    下载地址:http://developer.baidu.com/map/sdkandev-download.htm,建议初学者下载完整包,因为百度自带了一个Demo工程,里面百度地图的许多用法都应用上了,可以方便学习。


三.在项目中添加

   把里面的库导入,这里我是参考了百度官方自带的Demo例程导入的,依葫芦画瓢,不难

    至此,百度地图编程之前的环境就搭建好了。下面真正计入代码部分:

1.布局文件中添加控件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    
     <com.baidu.mapapi.map.MapView 
    android:id="@+id/bmapView"
	android:layout_width="fill_parent" 
	android:layout_height="fill_parent" 
	android:clickable="true"     
/>

</LinearLayout>

    注意此处用的控件是百度jar包中的文件,而不是安卓自带的MapView


2.修改AndroidManifest.xml中,设置相应的权限,笔者一开始依照原始教程中的权限设置,一直处于程序奔溃状态,所以采用百度官方自带的Demo中的权限设置:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.smarthome"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="18" />
    
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.smarthome.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
    
        <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.USE_CREDENTIALS" />
    <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
    <uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />

    <permission android:name="android.permission.BAIDU_LOCATION_SERVICE" >
    </permission>

    <uses-permission android:name="android.permission.BAIDU_LOCATION_SERVICE" >
    </uses-permission>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" >
    </uses-permission>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" >
    </uses-permission>
    <uses-permission android:name="android.permission.INTERNET" >
    </uses-permission>
    <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" >
    </uses-permission>
    <!-- <uses-permission android:name="android.permission.WRITE_APN_SETTINGS"></uses-permission> -->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" >
    </uses-permission>
    <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
    <uses-permission android:name="android.permission.WAKE_LOCK" >
    </uses-permission>
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_GPS" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.READ_CONTACTS" />
    <uses-permission android:name="android.permission.CALL_PHONE" />
    <uses-permission android:name="android.permission.READ_SMS" />
    <uses-permission android:name="android.permission.SEND_SMS" />
    <!-- SDK1.5需要android.permission.GET_TASKS权限判断本程序是否为当前运行的应用? -->
    <uses-permission android:name="android.permission.GET_TASKS" />
    <uses-permission android:name="android.permission.CAMERA" >
    </uses-permission>
    <uses-permission android:name="android.permission.RECORD_AUDIO" >
    </uses-permission>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" >
    </uses-permission>
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.BROADCAST_STICKY" />
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
    <!-- 来电消音 -->
    <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" >
    </uses-permission>
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    
    
    <supports-screens
        android:anyDensity="true"
        android:largeScreens="true"
        android:normalScreens="true"
        android:resizeable="true"
        android:smallScreens="true" />
</manifest>


3. Activity界面代码,注释的很详细,若有不明白的,参考原始教程:

package com.example.smarthome;

import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.MKGeneralListener;
import com.baidu.mapapi.map.MKEvent;
import com.baidu.mapapi.map.MKMapViewListener;
import com.baidu.mapapi.map.MapController;
import com.baidu.mapapi.map.MapView;
import com.baidu.platform.comapi.basestruct.GeoPoint;

import android.app.Activity;
import android.os.Bundle;
import android.widget.Toast;

public class MainActivity extends Activity{

	private static final String strKey = "7mKRrGFcZw6PPhewCjRZqZGQ";
	 private Toast mToast;
	//百度地图的三个重要元素
	private BMapManager   mBMapMan = null;
	private MapView       mMapView = null;
	private MapController mMapCon  = null;
	
	//MKMapViewListener 用于处理地图事件回调
	private MKMapViewListener mMapListener = null; 
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		
		//创建MapManager一定要在 setcontentView之前
		mBMapMan = new BMapManager(getApplication());
		mBMapMan.init(strKey, new MyGeneralListener());

		setContentView(R.layout.activity_main);
		
		mMapView = (MapView) findViewById(R.id.bmapView);
		
		initMap();
		
		double cLat = 32.044382;
		double cLon = 118.828688;
		moveToPoint(cLat, cLon);
	}
	
	/**
	 * 将地图移到指定位置,此函数只是显示的中心位置,并非精确到某个定位点
	 */
	private void moveToPoint(double cLat ,double cLon){
        /**
         * 将地图移动至指定点
         * 使用百度经纬度坐标,可以通过http://api.map.baidu.com/lbsapi/getpoint/index.html查询地理坐标
         * 如果需要在百度地图上显示使用其他坐标系统的位置,请发邮件至mapapi@baidu.com申请坐标转换接口
         */
		
		GeoPoint p = new GeoPoint((int)(cLat * 1E6),(int)(cLon * 1E6));
		mMapCon.setCenter(p);
	}
	
	/**
	 * 在布局文件被载入之后,初始化地图
	 */
	private void initMap(){
		//根据mapView获取 mapController,这些都是地图编程必须的
		mMapCon = mMapView.getController();
		
		mMapCon.enableClick(true);		//设置地图响应点击事件
		mMapCon.setZoom(12);			//设置地图缩放级别为12
		//显示内置的缩放控件
		mMapView.setBuiltInZoomControls(true);
	}
	
	// 常用事件监听,用来处理通常的网络错误,授权验证错误等
     class MyGeneralListener implements MKGeneralListener {
        
        @Override
        public void onGetNetworkState(int iError) {
            if (iError == MKEvent.ERROR_NETWORK_CONNECT) {
            	showToast("网络错误");
            }
            else if (iError == MKEvent.ERROR_NETWORK_DATA) {
            	showToast("请输入正确的检索条件");
            }
            // ...
        }

        @Override
        public void onGetPermissionState(int iError) {
        	//非零值表示key验证未通过
            if (iError != 0) {
                //授权Key错误:
            	showToast("授权Key错误");
            }
            else{
            	showToast("key认证成功"); 
            }
        }
    }
    
    //显示toast
	public void showToast(String msg) {
		if (mToast == null) {
			mToast = Toast.makeText(this, msg, Toast.LENGTH_SHORT);
		} else {
			mToast.setText(msg);
			mToast.setDuration(Toast.LENGTH_SHORT);
		}
		mToast.show();
	}
}


值得注意的是,笔者按照原始教程中的代码,一直运行奔溃,经过反复排查才知道原因:

1.对于MapManager,是

mBMapMan = new BMapManager(getApplication());

而原始教程是:

 mBMapManager = new BMapManager(this);  

笔者没有明白原因,若有知道的朋友,希望能告知,我猜想可能是Android  版本的问题,笔者采用的是Android4.1


2.AndroidManifest.xml设置问题,采用原始教程的权限设置是一直出错的,这个应该也是Android版本的问题


运行结果:



百度地图二次开发 需求讲解:异步加载百度地图,从后台获取的图标动态的更新到百度地图上,当点击图标时弹出弹框,不使用百度地图的默认弹窗,自定义其样式遇到的问题:1、百度地图去掉默认的标注.BMap_cpyCtrl { display:none; } .anchorBL { display:none; }2、百度地图中的方法不能放在函数里面,要在全局下定义使用;通过函数调用的方式来执 阅读详情

相关推荐

通过C#利用百度地图API获取地理位置实战教程

本文还有配套的精品资源,点击获取 简介:本文详细介绍了如何利用C#编程语言和百度地图API来获取用户位置的经纬度,并根据这些数据确定具体的地理位置信息。通过详细步骤,包括获取百度地图API的AK、引入HTTP处理库、构造HTTP请求、解析JSON响应等,展示了整个实现流程。同时,提供了示例代码,演示了如何在一个C#类中封装位置服务,并调用该服务以获取并展示用户所在城市的名称...

weixin_33245447的博客 2406

Android 百度地图开发详解

申请 API Key 首先需要注册百度账号,登陆百度账号,打开网址 http://developer.baidu.com/user/info 填写注册信息并提交,然后去自己的邮箱通过验证,就完成注册了。 接着访问 https://lbsyun.baidu.com/apiconsole/key 会看到下面这个界面 点击 创建应用 申请 API Key, 应用名称可以随便填,这里填 LBSTest ...

LouHerGetUp的博客 5851

百度地图API开发实战指南

本文还有配套的精品资源,点击获取 简介:百度地图作为国内主流的地图服务平台,提供了丰富的API和SDK。本指南将深入探讨百度地图开发中的关键知识点,包括覆盖物的使用、定位服务和路线规划。通过研究示例代码或项目模板,开发者可以快速掌握如何在地图上展示丰富内容、获取设备当前位置和实现智能化的导航体验。 1. 百度地图API简介 百度地图API是一个功能强大的地理信息...

weixin_30336531的博客 3626

Android 微信摇骰子,android百度地图定位开发

@Override public void onClick(View v) { switch (v.getId()) { case R.id.btnGo: imageDice.setImageDrawable(getResources().getDrawable( R.drawable.anim_dice)); new Thread(new DiceThread()).start(); break; default: break; } } } public class DiceThread implemen

m0_66264533的博客 4043

百度地图离线API 1.3+API2.0

百度地图离线API 1.3+API2.0,可以用于生成百度地图的离线编程。

AS安卓开发百度地图

AS安卓开发百度地图

老罗Android开发视频教程_基于JavaSE开发(适合Android初学者菜鸟级别的人)

老罗Android开发视频教程,讲的很细,适合Android菜鸟级别人学习,觉得网上大都是精华,不适合刚入门的人学习,就像Java学习用毕老师的视频一样,通俗易懂。 视频的下载地址: 百度网盘:http://pan.baidu.com/s/1kTgIyLT 教程大小:3.36G 提取密码:n77m 解压密码:www.he11oworld.com 这里分享一下Androi

夜影的世界 3019

HSMS/SECS/GEM/GEM300半导体通讯协议介绍

HSMS/SECS/GEM/GEM300半导体通讯协议解决方案介绍 目录 SECS/GEM协议通讯 1 目录 2 1.介绍 3 1.1 产品概述 3 1.1.1 高扩展性 4 1.2 通讯实现 4 1.2.2多主机实现 4 1.3 当前的SEMI标准 5 1.3.1 功能跟友商对比 6 1.4 软件灵活性 7 1.5 无需学习SECS 7 1.6 自定义消息传递 8 1.7 记录收集 8 1.8 SECS Manual文档 8 1.9 产品清单 8 2 产品结构 9 2.1 控制面板 9 2.2 使用环境

semisecs 16万+

【百度网盘】老罗android开发视频教程[压缩后3.63G]

老罗android视频教程-老罗的android视频-老罗android开发视频教程-老罗安卓开发视频教程   目录如下:   (一)android入门介绍   《老罗Android开发视频教程》第一集:android学习路线图介绍.avi   《老罗Android开发视频教程》第二集:android系统框架的介绍.avi   《老罗Android开发视频教程》第三集:androi...

IT自学网 4709

Rust嵌入式开发环境搭建指南(基于Stm32+Vscode)

本文档旨在指导开发者如何搭建基于Rust语言的STM32嵌入式开发环境。相比传统的C/C++开发方式,Rust提供了更强的内存安全保障和现代化的语言特性,非常适合嵌入式系统开发。本指南将详细介绍从环境搭建到项目配置的全过程,特别关注VSCode作为IDE的配置以及STLink和DAPLink调试器的使用。

u014627020的博客 2601

Win10下Delphi 10.4.2 (RAD Studio 10.4.2 )安装教程图解

Win10下Delphi 10.4.2 (RAD Studio 10.4.2 )安装和破解教程图解

1万+

[android编程学习日记1]搞硬件的,学习android初学心得,一下子豁然开朗许多

2014一旦时间想搞android,下载了android,之前一直搞单片机的,画电路,写程序,后来做网站也学习php,分分钟就会,因为风格类似于c,所以要什么效果就搜索,总能找到例子,渐渐的搭建起来了网站框架。后来也学会了跟微信通信,百度地图api的调用。其实程序编程都大同小异,有一段时间还搞VS编写MFC上位机电脑软件控制机械手,也算是简单的初步入门吧。(话说最近工作要搞PLC,曾经知道这个,也

程序猿的那些书 1378

Python爬虫之爬取并下载哔哩哔哩视频

它可以爬取并下载视频文件和音频文件!亲自使用过,太好用了。

2301_80124151的博客 3万+

老罗android开发视频教程全集百度网盘下载

Android 是Google开发的基于Linux平台的开源手机操作系统。它包括操作系统、用户界面和应用程序—— 移动电话工作所需的全部软件,而且不存在任何以往阻碍移动产业创新的专有权障碍。 Android以Java为编程语言,使接口到功能,都有层出不穷的变化,其中Activity等同于J2ME的MIDlet,一个 Activity 类(class)负责创建视窗(window),一个活动中的Act...

xmt1139057136的专栏 1万+

STM32H743 SD卡读写避坑实录:CubeMX配置MDMA给FATFS,我的FreeRTOS项目踩了哪些雷?

本文详细解析了STM32H743在CubeMX配置中结合SDMMC、MDMA与FATFS的实战避坑指南,特别针对FreeRTOS环境下的SD卡读写问题提供了解决方案。从时钟配置到FATFS参数设置,再到DMA缓存维护和FreeRTOS集成技巧,帮助开发者高效解决数据损坏、DMA传输错误等常见问题,提升项目稳定性。

weixin_30878501的博客 494

用 CL_ABAP_ZIP 在 ABAP 里打包任意文件:从前端多选到 ZIP 交付的一条龙实践

本文介绍了在SAP ABAP中实现文件打包交付的完整解决方案。文章首先区分了ZIP和GZIP的不同用途:ZIP用于多文件归档,GZIP用于单数据流压缩。核心流程包括四个步骤:文件选择、二进制上传、内存打包和ZIP输出,并提供了关键对象与函数的速查表。针对实际项目中常见的乱码、大文件处理等问题给出了解决方案,最后展示了一个完整的可运行示例代码,涵盖了从文件选择到下载的全流程实现。该方案适用于财务、质量、运维等多种业务场景,能够有效解决多文件交付的最后一公里问题。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 216

《老罗Android开发视频教程》更新

记得之前在开源中国里发表的《老罗将死,或者Android也将就换代,但是互联网的,共享,互助精神将永存》有人说我会半途而废,毕竟300集。但是老罗现在依旧用行动回应这些质疑,昨晚就花了3个小时录制了两集视频,虽说这两集视频总共不到一个小时,但是老罗还是很乐意去分享!等着吧,国庆8天老罗决定不休息,计划录制四十集,同样会每天把新录制的分享到开源中国!也有人怀疑300集太多,但是我告诉大家,老罗这次录

apkbus的专栏 4001

32、通用处理器通信平台发展与5G开源社区技术解析

本文探讨了基于通用处理器(GPP)的通信平台在5G技术中的发展现状与挑战,详细介绍了多个开源平台和硬件架构,并分析了软件加速方法和未来发展方向。文章指出,尽管GPP具有灵活性和开放性优势,但在实时信号处理和功耗等方面仍存在瓶颈,需要通过核心技术研发、标准化协作和应用拓展推动5G技术的实际应用。

orange的博客 129

Android入门计划

其实一直都想学习android,但总是由于各种原因耽搁下来,现阶段时间比较充裕,遂制定学习计划如下: 从8.27到9.27这一个月时间,每天一篇学习笔记。

NULL 865

【YOLOv11】014、YOLOv11模型导出:PyTorch到ONNX格式转换与优化

摘要:本文详细介绍了如何将PyTorch训练的YOLOv11模型高效转换为ONNX格式。重点包括:分离模型特征提取与后处理、设置动态维度、优化ONNX算子、验证转换正确性等关键步骤。作者分享了实际项目中的经验教训,如版本对齐、算子兼容性处理、后处理分离等实用技巧,并推荐使用onnx-simplifier工具优化模型。文章强调模型转换是一个需要反复调试的过程,建议保留转换记录形成知识库,以提高部署效率并避免常见错误。

企鹅码农的专属播客,分享10多年的实战案例和经验解读,包含YOLO、RT-DETR、AI等各个工作领域。 306

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

【备忘】2016年黑马android安卓74期完整实战开发基础就业视频

课程目录:     01_web基础(day01-day13)     02_Android基础(day14-day25)     03_手机安全卫士(day26-day38)     04_自定义控件(day39-day40)     05_JNI(day41-day43)     06_智慧北京(day44-day50)     07_谷歌电子市场(day51-day56)

kzajiezi的博客 704

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

老罗android开发视频教程学习完了

让我学到了android的文件结构,事件窗口数据传递,百度地图开发很感谢 转载于:https://www.cnblogs.com/dayspring/p/3727260.html

weixin_34015336的博客 131

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

JavaEE、Android、iOS源码集合——AppProjects项目推荐

JavaEE、Android、iOS源码集合——AppProjects项目推荐 1. 项目基础介绍 AppProjects 是一个开源的项目集合,包含了多个使用 Java、JavaEE、Android 和 iOS 编写的示例应用程序和小型项目。这些项目涵盖了从前端界面设计到后端数据库处理的各个方面,非常适合初学者和开发者进行学习和参考。项目以代码清晰、注释详细为特点,旨在帮助开发者快速理解并应用相...

gitblog_01155的博客 854
上一篇: 求职之战
下一篇: MTK平台安卓手机性能测试方法
memoryjs
博客等级 码龄18年 240粉丝 113原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值