android百度地图api实现短信接收定位
基于Android平台下基于百度地图API的地图导航设计毕业论文
本科毕业论文(设计)题目Android平台下基于百度地图API的地图导航设计专业电子信息科学与技术作者姓名刘茂强学号**********单位物理科学与信息工程学院指导教师郎丰法2014 年 05月教务处编原创性声明本人郑重声明:所提交的学位论文是本人在导师指导下,独立进行研究取得的成果。
除文中已经引用的内容外,论文中不包含其他人已经发表或撰写过的研究成果,也不包含为获得聊城大学或其他教育机构的学位证书而使用过的材料。
对本文的研究作出重要贡献的个人和集体,均在文中以明确的方式表明。
本人承担本声明的相应责任。
学位论文作者签名:日期:指导教师签名:日期:目录前言 (9)1.绪论 (10)1.1 背景及意义 (10)1.2 研究现状 (10)1.3 研究课题主要内容 (11)1.3.1 地点搜索和位置定位 (11)1.3.2 附近搜索 (11)1.3.3 路线规划 (11)1.3.4 公交线路查询 (11)1.3.5 GPS导航 (11)1.4 论文结构 (11)2.Android平台与开发环境 (13)2.1 Android系统 (13)2.1.1 后缀简介 (13)2.1.2 应用组件 (13)2.1.3 系统运行库 (14)2.2 Eclipse (14)2.2.1 基本介绍 (14)2.2.2 主要组成 (15)2.2.3 软件开发包 (15)2.3 Android开发环境搭建 (15)3.相关配置和框架结构 (16)3.1 工程配置 (16)3.1.1 Android SDK的配置 (16)3.1.2 定位SDK的配置 (16)3.1.3 导航SDK的配置 (16)3.2 密钥申请 (17)3.2.1 密钥简介 (17)3.2.2 申请步骤 (17)3.3 配置AndroidManisfet.xml (19)3.3.1权限配置 (19)3.3.2 添加对应的开发密钥 (19)3.3.3 声明service组件 (19)3.4 程序结构 (19)4.主页面设计 (21)4.1 基本配置 (21)4.1.1 配置main.xml (21)4.1.2 配置AndroidManifest.xml (21)4.2 MainActivity代码设计 (21)4.2.1创建地图MainActivity,并import相关类 (22)4.2.2 MainActivity变量定义 (22)4.2.3 MainActivity主要变量初始化 (22)4.2.4 各控件设置 (22)4.2.5 选择菜单 (23)4.2.6 搜索事件处理 (24)4.2.7 定位事件处理 (25)5.附近搜索设计 (26)5.1 基本配置 (26)5.1.1 配置near.xml (26)5.1.2 AndroidManifest.xml (26)5.2 NearActivity代码设计 (26)5.2.1 创建地图NearActivity,并import相关类 (26)5.2.2 NearActivity变量定义 (26)5.2.3 NearActivity主要变量初始化 (27)5.2.4 各控件设置 (27)5.2.5 事件处理 (27)6.路线规划设计 (29)6.1 基本配置 (29)6.1.1 配置way.xml (29)6.1.2 AndroidManifest.xml (29)6.2 WayActivity代码设计 (29)6.2.1 创建地图WayActivity,并import相关类 (29)6.2.2 WayActivity变量定义 (29)6.2.3 WayActivity主要变量初始化 (30)6.2.4 各控件设置 (30)6.2.5 搜索结果处理 (31)6.2.6 节点浏览 (31)7.公交查询设计 (34)7.1 基本配置 (34)7.1.1 配置bus.xml (34)7.1.2 AndroidManifest.xml (34)7.2 BusActivity代码设计 (34)7.2.1 创建地图BusActivity,并import相关类 (34)7.2.2 BusActivity变量定义 (35)7.2.3 WayActivity主要变量初始化 (35)7.2.4 各控件设置 (35)7.2.5 事件处理 (35)8.驾车导航设计 (38)8.1 基本配置 (38)8.1.1 配置navigation.xml (38)8.1.2 AndroidManifest.xml (38)8.2 NavigationActivity代码设计 (38)8.2.1 创建地图NavigationActivity,并import相关类 (38)8.2.2 NavigationActivity变量定义 (39)8.2.3 NavigationActivity主要变量初始化 (39)8.2.4 设置单击事件 (39)总结 (42)致谢 (43)参考文献 (44)附录 (45)摘要在近年来移动设备智能化、轻便化的趋势下,地图导航已经成为人们出行必不可少的工具,给人们的生活带来了极大的便利。
【推荐下载】Android中百度地图基础实现,定位
Android 中百度地图基础实现,定位2017/04/23 7533 1 登录百度账号 2 下载对应sdk 3 登陆API 控制台申请key-创建应用-配置应用-获取安全码获取秘钥中:获得开发版sha1:打开AndroidStudio 的Terminal 窗口,进入.android 目录(默认是在C:\Users\Administrator.android 目录下),输入如下命令:keytool -v -list -keystore debug.keystore 密码为:android(输入时不显示) 获得发布版sha1: 1.将项目打包,Build–Generated Signed APK(不会打包?看这里),生成jks 库文件2.进入jks 文件所在目录,键如下命令keytool -list -v -keystore store.jks 实现:import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.widget.TextView;import com.baidu.mapapi.SDKInitializer;import com.baidu.mapapi.map.BaiduMap;import com.baidu.mapapi.map.MapStatus;importcom.baidu.mapapi.map.MapStatusUpdateFactory;importcom.baidu.mapapi.map.MapView;import com.baidu.location.BDLocation;import com.baidu.location.BDLocationListener;import com.baidu.location.LocationClient;import com.baidu.location.LocationClientOption;import com.baidu.location.BDNotifyListener;// 假如用到位置提醒功能,需要import 该类import com.baidu.location.Poi;import com.baidu.mapapi.map.MyLocationData;import tLng;import java.util.List;public class MainActivity extends AppCompatActivity { public LocationClient mLocationClient = null; public BDLocationListener myListener = new MyLocationListener(); private TextView location_text; private BaiduMap baiduMap; private boolean isFirstLoc=true; @Override protected void onCreate(Bundle savedInstanceState) { // SDKInitializer.initialize(getApplicationContext()); super.onCreate(savedInstanceState); setContentView(yout.activity_main); location_text = (TextView) findViewById(R.id.location); MapView map= (MapView)。
基于百度地图API的主动定位研究与实现
<script type=“text/javascript” src=“http:///map/jsdemo/demo/convertor.js”> </script> <script type=“text/javascript”src=“http:///api?v=1.4”> </script&g 1.4 版本.
· 67 ·
4 为团友.导游在 2:25 的位置,位于园内月鉴湖西北处,如图 4 我的位置.导游查看团友 1332 位 置,勾上提醒,点击查找,查得 1332 位于园内入公园牌坊处,并查看到该团友拍摄的实景图,如图 5、图 6.这时团友 1332 手机提醒音乐响起.导游又输入 133*,查得 1332,1333,1334 号团友的实时 位置,如图 7.这种体验,让导游对团友定位了如指掌,在该次带团活动中获得良好体验.
· 69 ·
mp.addControl (new BMap.MapTypeControl ());//添加显示模式 mp.centerAndZoom (new BMap.Point (116.728650288,23.3839084533),16); //预定位,设定显示比例级为 16 级
百度地图定位开发——Android地图sdk开发
百度地图定位开发——Android地图sdk开发百度地图Android定位SDK是为Android移动端应⽤提供的⼀套简单易⽤的定位服务接⼝,专注于为⼴⼤开发者提供最好的综合定位服务。
通过使⽤百度定位SDK,开发者可以轻松为应⽤程序实现智能、精准、⾼效的定位功能。
打开百度地图sdk开发,输⼊应⽤名称这⾥需要输⼊SHA1,具体寻找SHA1过程可以参考官⽅的⽂档创建成功后,下载官⽅的jar包,将解压后的所有⽂件添加到申请AK时使⽤的项⽬⽂件中的lib⽬录中。
然后在app⽬录下的build.gradle⽂件中android块中配置sourceSets标签,内容如下:sourceSets {main {jniLibs.srcDir 'libs'}}此时就能将部分⽬录添加到项⽬视图中,现在需要将jar⽂件添加到项⽬视图中。
在app⽬录的build.gradle的dependencies块中添加以下代码,然后右键⽬标jar⽂件,选择Add as library,就能将其加⼊到项⽬视图中。
implementation files('libs\\BaiduLBS_Android.jar')然后打开AndroidManifest.xml⽂件,在<application>中加⼊如下代码配置开发密钥AK,并且根据官⽅⽂档,添加权限显⽰地图我们在xml⽂件的代码中直接输⼊<com.baidu.mapapi.map.MapViewandroid:id="@+id/bmapView"android:layout_width="411dp"android:layout_height="662dp"android:clickable="true"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"tools:ignore="MissingClass" />然后我们需要初始化地图,创建⼀个activitypackage com.example.zty_map;import androidx.appcompat.app.AppCompatActivity;import android.app.Application;import android.os.Bundle;import com.baidu.mapapi.CoordType;import com.baidu.mapapi.SDKInitializer;public class MAPZTY1 extends Application {@Overridepublic void onCreate() {super.onCreate();//在使⽤SDK各组件之前初始化context信息,传⼊ApplicationContextSDKInitializer.initialize(this);//⾃4.3.0起,百度地图SDK所有接⼝均⽀持百度坐标和国测局坐标,⽤此⽅法设置您使⽤的坐标类型. //包括BD09LL和GCJ02两种坐标,默认是BD09LL坐标。
基于Android系统智能手机的GPS定位功能的设计与实现
基于Android系统智能手机的GPS定位功能的设计与实
现
在基于Android系统智能手机的GPS定位功能的设计与实现时,需要考虑以下几个方面。
1. 确定需求和功能:明确应用的定位需求和功能,例如地图定位、导航、行车记录和位置共享等,以确定需要使用何种GPS定位
服务和相关API。
2. 获取定位权限:在Android系统中,需要申请定位权限才能
使用GPS定位服务。
可以在应用中使用系统提供的API或者在清单
文件中声明权限来获取定位权限。
3. 调用系统定位服务:在使用GPS定位服务时,可以通过系统
提供的LocationManager类来获得Location对象,并获取定位信息。
4. 实现定位功能:在获得定位信息后,可以将其在应用中进行
处理,例如在地图上展示当前位置、提供导航指引等。
可以使用第
三方地图SDK来实现这些功能。
5. 处理定位异常:在使用GPS定位时,可能会出现一些异常情况,例如定位时间过长、定位数据不准确等。
需要进行异常处理,
保证应用的稳定性和准确性。
总体来说,在基于Android系统智能手机的GPS定位功能的设
计与实现时,需要详细了解系统提供的GPS定位服务和相关API,
根据需求和功能进行适当的选择和配置,并进行异常处理和优化,
以便实现高效、稳定和准确的定位功能。
ANDROID地图SDK
一、Android地图SDK概述1.Android 地图SDK v3.7.3百度地图Android SDK是一套基于Android 2.1及以上版本设备的应用程序接口。
您可以使用该套SDK开发适用于Android系统移动设备的地图应用,通过调用地图SDK接口,您可以轻松访问百度地图服务和数据,构建功能丰富、交互性强的地图类应用程序。
2.功能介绍1)地图(1)地图展示包括:普通地图(2D,3D)、卫星图和实时交通图(2)地图操作:可通过接口或手势控制来实现地图的点击、双击、长按、缩放、旋转、改变视角等操作。
2)POI检索(1)周边检索:以某一点为中心,指定距离为半径,根据用户输入的关键词进行POI检索;(2)区域检索:在指定矩形区域内、根据关键词进行POI检索;(3)城市内检索:在某一城市内,根据用户输入的关键字进行POI检索;(4)POI详情检索:根据POI的ID信息,检索该兴趣点的详情。
3)地理编码(1)正向地理编码:实现了将中文地址或地名描述转换为地球表面上相应位置的功能;(2)反向地理编码:将地球表面的地址坐标转换为标准地址的过程。
4)线路规划(1)公交信息查询:可对公交详细信息进行查询;(2)公交换乘查询:根据起、终点,查询策略,进行线路规划方案;(3)驾车线路规划:提供不同策略,规划驾车路线;(支持设置途经点)(4)步行路径检索:支持步行路径的规划。
(5)骑行路径检索:支持跨城骑行路径规划。
5)地图覆盖物百度地图SDK支持多种地图覆盖物,帮助您展示更丰富的地图。
目前所支持的地图覆盖物有:定位图层、地图标注(Marker)、几何图形(点、折线、弧线、多边形等)、地形图图层、POI检索结果覆盖物、线路规划结果覆盖物、热力图图层、瓦片图层等。
6)定位采用GPS、WIFI、基站、IP混合定位模式,请使用Android定位SDK获取定位信息,使用地图SDK定位图层进行位置展示。
7)离线地图用户可以通过SDK在线下载离线包接口,下载离线地图包,使用离线地图可节省用户流量,提供更好的地图展示效果。
php利用百度地图API进行IP定位和GPS定位
php利⽤百度地图API进⾏IP定位和GPS定位最近在做⼀个⼿机端的webapp地图应⽤,⽽核⼼内容当然是定位了,但是定位的话有⼏种⽅式,IP定位,GPS定位,基站定位(这个貌似webapp⽤不了),那么剩下核⼼的gps定位和ip定位了,我们知道,html5有定位API,但是该API拿到的GPS数据是硬件坐标,⽆法直接显⽰在地图上。
后来上百度LBS云看到有地图IP定位API和GPS坐标转换API,地址:百度地图API的调⽤需要申请KEY,这⾥就不具体介绍了,直接贴上本⼈写了两个关键⽅法,为了⽅便前台调⽤,返回数据采⽤以下格式{address: "北京市海淀区西⼆旗北路",province: "北京市",city: "北京市",street: "西⼆旗北路",street_number: "",city_code: 131,lng: 116.3207676804,lat: 40.064084055578}核⼼类<?php/*** @author xialei <xialeistudio@>*/class map{private static $_instance;const REQ_GET = 1;const REQ_POST = 2;/*** 单例模式* @return map*/public static function instance(){if (!self::$_instance instanceof self){self::$_instance = new self;}return self::$_instance;}/*** 执⾏CURL请求* @author: xialei<xialeistudio@>* @param $url* @param array $params* @param bool $encode* @param int $method* @return mixed*/private function async($url, $params = array(), $encode = true, $method = self::REQ_GET){$ch = curl_init();if ($method == self::REQ_GET){$url = $url . '?' . http_build_query($params);$url = $encode ? $url : urldecode($url);curl_setopt($ch, CURLOPT_URL, $url);}else{curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_POST, true);curl_setopt($ch, CURLOPT_POSTFIELDS, $params);}curl_setopt($ch, CURLOPT_REFERER, '百度地图referer');curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (iPhone; CPU iPhone OS 7_0 like Mac OS X; en-us) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);$resp = curl_exec($ch);curl_close($ch);return $resp;}/*** ip定位* @param string $ip* @return array* @throws Exception*/public function locationByIP($ip){//检查是否合法IPif (!filter_var($ip, FILTER_VALIDATE_IP)){throw new Exception('ip地址不合法');}$params = array('ak' => '百度地图API KEY','ip' => $ip,'coor' => 'bd09ll'//百度地图GPS坐标);$api = '/location/ip';$resp = $this->async($api, $params);$data = json_decode($resp, true);//有错误if ($data['status'] != 0){throw new Exception($data['message']);}//返回地址信息return array('address' => $data['content']['address'],'province' => $data['content']['address_detail']['province'],'city' => $data['content']['address_detail']['city'],'district' => $data['content']['address_detail']['district'],'street' => $data['content']['address_detail']['street'],'street_number' => $data['content']['address_detail']['street_number'],'city_code' => $data['content']['address_detail']['city_code'],'lng' => $data['content']['point']['x'],'lat' => $data['content']['point']['y']);}/*** GPS定位* @param $lng* @param $lat* @return array* @throws Exception*/public function locationByGPS($lng, $lat){$params = array('coordtype' => 'wgs84ll','location' => $lat . ',' . $lng,'ak' => '百度地图API KEY','output' => 'json','pois' => 0);$resp = $this->async('/geocoder/v2/', $params, false); $data = json_decode($resp, true);if ($data['status'] != 0){throw new Exception($data['message']);}return array('address' => $data['result']['formatted_address'],'province' => $data['result']['addressComponent']['province'],'city' => $data['result']['addressComponent']['city'],'street' => $data['result']['addressComponent']['street'],'street_number' => $data['result']['addressComponent']['street_number'],'city_code'=>$data['result']['cityCode'],'lng'=>$data['result']['location']['lng'],'lat'=>$data['result']['location']['lat']);}}。
Android百度地图——定位SDK(版本v3.1)(一)
Android百度地图——定位SDK(版本v3.1)(一)分类:Android百度地图2013-02-16 21:12 1078人阅读评论(2) 收藏举报androidAndroidANDROIDgpsGPS在wifi3G2G环境下定位百度地图一、使用百度提供的地图定位服务所需资源:在百度官网,下载百度地图定位SDK(Android版),在里面找liblocSDK3.so和locSDK_3.1.jar这两个文件。
下载地址:/map/geosdk-android-download.htm二、搭建环境:1、将liblocSDK3.so文件拷贝到libs/armeabi目录下,将locSDK3.1.jar文件拷贝到libs 目录下,并将locSDK3.1.jar导入到工程中。
如下图:2、修改AndroidManifest.xml文件:a. 在application标签中声明service组件1<service2android:enabled="true"3android:name="com.baidu.location.f"4android:process=":remote"/>b. 声明所需权限5<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 6<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 7<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>8<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 9<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>10<uses-permission android:name="android.permission.READ_PHONE_STATE"/>11<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 12<uses-permission android:name="android.permission.INTERNET"/>13<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>14<uses-permission android:name="android.permission.READ_LOGS"/>三、具体实现:1、构建LocationClient类的对象,设置定位参数,并注册实现了BDLocationListener 接口的类的对象为监听器。
android开发百度地图定位功能实现
android 百度地图定位功能实现00package com.example.foreveross.office;100200import com.baidu.location.BDLocation;300import com.baidu.location.BDLocationListener;400import com.baidu.location.LocationClient;500import com.baidu.location.LocationClientOption;600import com.baidu.mapapi.BMapManager;700import com.baidu.mapapi.map.LocationData;800import com.baidu.mapapi.map.MKMapViewListener;901import com.baidu.mapapi.map.MapController;01import com.baidu.mapapi.map.MapPoi;101import com.baidu.mapapi.map.MapView;201import com.baidu.mapapi.map.MyLocationOverlay;301import api.basestruct.GeoPoint; 401import com.example.wenandroid.R;50101import android.app.Activity;701import android.content.res.Configuration; 801import android.location.Location;902import android.location.LocationListener; 002import android.location.LocationManager;102import android.os.Bundle;202import android.view.Menu;302import android.widget.FrameLayout;402import android.widget.Toast;502602public class MapActivity extends Activity { 702BMapManager mBMapMan = null;802MapView mMapView = null;903MapController mMapController;03MyLocationOverlay mLocationOverlay;103 LocationData locData = null;033LocationClient mLocClient;03 4 public MyLocationListenner myListener = new MyLocationListenner();035036@Override037protected void onCreate(Bundle savedInstanceState) {038super.onCreate(savedInstanceState);039mBMapMan = new BMapManager(getApplication());04mBMapMan.init("BB3299207a600b8a035b76982adde60f", null);041setContentView(yout.activity_main);042mMapView = (MapView) findViewById(R.id.bmapsView);043mMapView.setBuiltInZoomControls(true);044// 设置启用内置的缩放控件045mMapController = mMapView.getController();046mMapController.setZoom(12);// 设置地图zoom级别04704 // 定位初始化04mLocClient = new LocationClient(this);905locData = new LocationData();05mLocClient.registerLocationListener(myListener);105LocationClientOption option = new LocationClientOption(); 205option.setOpenGps(true);// 打开gps305option.setCoorType("bd09ll"); // 设置坐标类型405option.setScanSpan(5000);505mLocClient.setLocOption(option);605mLocClient.start();705805// 定位图层初始化906mLocationOverlay = new MyLocationOverlay(mMapView);06// 设置定位数据106mLocationOverlay.setData(locData);206// 添加定位图层306 mMapView.getOverlays().add(mLocationOverlay);065mLocationOverlay.enableCompass(); 066// 修改定位数据后刷新图层生效067mMapView.refresh();068069}07//实现监听器07 1 public class MyLocationListenner implements BDLocationListen er {072073@Override074public void onReceiveLocation(BDLocation location) {075if (location == null)076return ;077078titude = location.getLatitude();079locData.longitude = location.getLongitude();08//如果不显示定位精度圈,将accuracy赋值为0即可081locData.accuracy = location.getRadius(); 082locData.direction = location.getDerect();083//更新定位数据084mLocationOverlay.setData(locData);085//更新图层数据执行刷新后生效086mMapView.refresh();087//是手动触发请求或首次定位时,移动到定位点08808 9 mMapController.animateTo(newGeoPoint((int)(locData .latitude* 1e6), (int)(locData.longitude * 1e6)));09}091092public void onReceivePoi(BDLocation poiLocation) {093if (poiLocation == null){094return ;095}096}09}709809@Override910protected void onDestroy() {10// TODO Auto-generated method stub 110mMapView.destroy();2103 if (mBMapMan != null) {104 mBMapMan.destroy();10mBMapMan = null;510}610super.onDestroy();710}810911@Override11protected void onPause() {111// TODO Auto-generated method stub 211mMapView.onPause();311if (mBMapMan != null) {411mBMapMan.stop();511}611super.onPause();711}811912@Override12protected void onResume() {112// 获取位置管理者,视图根据位置监听更新位置2123 mLocationOverlay.getMyLocation();124 mLocationOverlay.enableCompass();12mMapView.onResume();512if (mBMapMan != null) {612mBMapMan.start();712}812super.onResume();913}131132 }需要用到的jar包大家可以到百度地图api网站上下载。
百度地图移动api
百度地图移动api
百度地图移动API是一套提供地图展示、地理位置搜索、
路径规划等功能的接口,可用于开发移动端应用和网页应用。
它包括了地图展示、标注、定位、搜索、路径规划等
功能,可以帮助开发者实现移动端地图相关的应用功能。
使用百度地图移动API,可以在地图上显示地理位置、添加覆盖物、标记点、绘制路径,并提供地理位置搜索、逆地
理编码、周边搜索等功能。
开发者可以通过API接口获取
相关的地理信息,并根据自己的业务需求进行展示和处理。
百度地图移动API提供了多种开发语言和平台的SDK,包
括iOS、Android、JavaScript等,使开发者能够方便地集成和使用地图功能。
开发者可以通过注册百度地图开放平
台账号获取API密钥,并在应用中使用API密钥进行接口
调用。
通过百度地图移动API,开发者可以打造各种基于地图的应用,如地图导航、位置分享、附近商家搜索等,满足用户对地图相关功能的需求。
百度定位使用方法
导入库文件在下载页面下载最新的库文件。
将liblocSDK2.4.so文件拷贝到libs/armeabi目录下。
将locSDK2.4.jar文件拷贝到工程根目录下,并在工程属性->Java Build Path->Libraries中选择“Add JARs”,选定locSDK2.4.jar,确定后返回。
这样您就可以在程序中使用百度定位API了。
设置AndroidManifest.xml为区分2.3版本service,需要将manifest file中的intent filter声明为com.baidu.location.service_v2.4 在application标签中声明service组件1.<service android:name="com.baidu.location.f"android:enabled="true"android:process=":re mote"2.android:permission="android.permission.BAIDU_LOCATION_SERVICE">3.<intent-filter>4.<action android:name="com.baidu.location.service_v2.4"></action>5.</intent-filter>6.</service>声明使用权限1.<permission android:name="android.permission.BAIDU_LOCATION_SERVICE"></permission >2.<uses-permission android:name="android.permission.BAIDU_LOCATION_SERVICE"></uses-permission>3.<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>4.<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>5.<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>6.<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>7.<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>8.<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>9.<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>10.<uses-permission android:name="android.permission.INTERNET"/>11.<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>12.<uses-permission android:name="android.permission.READ_LOGS"></uses-permission>import相关类1.import com.baidu.location.BDLocation;2.import com.baidu.location.BDLocationListener;3.import com.baidu.location.LocationClient;4.import com.baidu.location.LocationClientOption;5.import com.baidu.location.BDNotifyListener;//假如用到位置提醒功能,需要import该类功能类的使用初始化LocationClient类此处需要注意:LocationClient类必须在主线程中声明。
利用百度地图API获取当前位置信息
利⽤百度地图API获取当前位置信息利⽤百度地图API可以做很多事情,个⼈感觉最核⼼也是最基础的就是定位功能了。
这⾥分享⼀个制作的JS可以实现登录⽹页后定位:1 <script type="text/javascript">2var map;3var gpsPoint;4var baiduPoint;5var gpsAddress;6var baiduAddress;7var x;8var y;9function getLocation() {10//根据IP获取城市11var myCity = new BMap.LocalCity();12 myCity.get(getCityByIP);1314//获取GPS坐标15if (navigator.geolocation) {16 navigator.geolocation.getCurrentPosition(showMap, handleError, { enableHighAccuracy: true, maximumAge: 1000 });17 } else {18 alert("您的浏览器不⽀持使⽤HTML 5来获取地理位置服务");19 }20 }2122function showMap(value) {23var longitude = value.coords.longitude;24var latitude = titude;25 map = new BMap.Map("map");26 x=latitude;27 y=longitude;28//alert("坐标经度为:" + latitude + ",纬度为:" + longitude );29 gpsPoint = new BMap.Point(longitude, latitude); // 创建点坐标303132//根据坐标逆解析地址33var geoc = new BMap.Geocoder();34 geoc.getLocation(gpsPoint, getCityByCoordinate);3536 BMap.Convertor.translate(gpsPoint, 0, translateCallback);37 map.enableScrollWheelZoom(true);38 }3940 translateCallback = function (point) {41 baiduPoint = point;42 map.centerAndZoom(baiduPoint, 18);43var geoc = new BMap.Geocoder();44 geoc.getLocation(baiduPoint, getCityByBaiduCoordinate);45 }4647function getCityByCoordinate(rs) {48 gpsAddress = rs.addressComponents;49var address = "GPS标注:" + gpsAddress.province + "," + gpsAddress.city + "," + gpsAddress.district + "," + gpsAddress.street + "," + gpsAddress.streetNumber;50var marker = new BMap.Marker(gpsPoint); // 创建标注51 map.addOverlay(marker); // 将标注添加到地图中52var labelgps = new bel(address, { offset: new BMap.Size(20, -10) });53 marker.setLabel(labelgps); //添加GPS标注54 }5556function getCityByBaiduCoordinate(rs) {57 baiduAddress = rs.addressComponents;58var address = "百度标注:" + baiduAddress.province + "," + baiduAddress.city + "," + baiduAddress.district + "," + baiduAddress.street + "," + baiduAddress.streetNumber; 59var marker = new BMap.Marker(baiduPoint); // 创建标注60 map.addOverlay(marker); // 将标注添加到地图中61var labelbaidu = new bel(address, { offset: new BMap.Size(20, -10) });62 marker.setLabel(labelbaidu); //添加百度标注63 }6465//根据IP获取城市66function getCityByIP(rs) {67var cityName = ;68 alert("根据IP定位您所在的城市为:" + cityName);69 }7071function handleError(value) {72switch (value.code) {73case 1:74 alert("位置服务被拒绝");75break;76case 2:77 alert("暂时获取不到位置信息");78break;79case 3:80 alert("获取信息超时");81break;82case 4:83 alert("未知错误");84break;85 }86 }8788function init() {89 getLocation();90 }9192 window.onload = init;9394 </script>完成定位功能后可以添加相关代码编辑地图控件覆盖物信息窗⼝等等各种功能。
定位短信的原理
定位短信的原理
定位短信的原理主要基于以下步骤:
1. 攻击者或失主预先设定好一个网站或服务,该网站或服务具有定位功能。
2. 通过软件或代码将该网站或服务的定位功能转换成网址或指令。
3. 将这个网址或指令发送到目标手机上。
4. 目标手机接收到这个网址或指令后,如果开启了自动GPS或Wi-Fi功能,系统会自动定位并将定位信息以短信方式发送到攻击者指定的手机或邮箱中,或者在预设的密码短信广播下自动定位并将位置以短信的方式返回给发送方。
请注意,定位短信可能存在安全风险,因此请谨慎使用,并确保手机安全。
客户端开发教程:学会使用常见的地图定位技术(六)
客户端开发教程:学会使用常见的地图定位技术地图定位技术在现代应用程序开发中扮演着重要的角色,通过准确定位用户的位置,开发者可以为用户提供更加精准的服务和功能。
本文将介绍一些常见的地图定位技术,并为初学者提供相关教程,帮助大家快速掌握这些技术。
一、GPS定位技术GPS(全球定位系统)是一种广泛应用于定位和导航的技术,通过接收卫星信号来获得准确的地理位置信息。
在Android开发中,使用GPS定位技术可以通过系统提供的LocationManager类来实现。
要在应用中使用GPS定位技术,首先需要在文件中添加相应的权限:```xml<uses-permission android:name="_FINE_LOCATION" />```在代码中,你可以通过以下方式获得用户的地理位置信息:```javaLocationManager locationManager = (LocationManager) getSystemService(_SERVICE);LocationListener locationListener = new LocationListener() {public void onLocationChanged(Location location) {// 处理地理位置变化事件}public void onStatusChanged(String provider, int status, Bundle extras) {}public void onProviderEnabled(String provider) {}public void onProviderDisabled(String provider) {}};(_PROVIDER, 0, 0, locationListener);```其中,_PROVIDER指定了使用GPS定位,0, 0分别表示最小时间间隔和最小距离间隔(单位为毫秒和米)。
基于Android实现百度地图定位过程详解
基于Android实现百度地图定位过程详解⼀、问题描述LBS位置服务是android应⽤中重要的功能,应⽤越来越⼴泛,下⾯我们逐步学习和实现lbs相关的应⽤如定位、地图、导航等,⾸先我们看如何基于百度地图实现定位功能⼆、配置环境2、下载定位SDK,并导⼊SDK如图所⽰:三、编写MyApplication类编写MyApplication类,为了使⽤⽅便我们可以将实现定位的⽅法封装的Application组件中封装下列⽅法1、获取定位信息——requestLocationInfo()2、通过⼴播发送位置信息——sendBroadCast()3、停⽌定位——stopLocationClient()public class MyApplication extends Application{public LocationClient mLocationClient = null;public GeofenceClient mGeofenceClient;public MyLocationListenner myListener = new MyLocationListenner();public static String TAG = "MyApplication";private static MyApplication mInstance = null;@Overridepublic void onCreate(){mInstance = this;mLocationClient = new LocationClient(this);/*** 项⽬的key,⾃⼰到官⽹申请 /apiconsole/key*/mLocationClient.setAK("你的应⽤Key");mLocationClient.registerLocationListener(myListener);mGeofenceClient = new GeofenceClient(this);super.onCreate();Log.d(TAG, "... Application onCreate... pid=" + Process.myPid());}public static MyApplication getInstance(){return mInstance;}/*** 停⽌定位*/public void stopLocationClient(){if (mLocationClient != null && mLocationClient.isStarted()){mLocationClient.stop();}}/*** 发起定位*/public void requestLocationInfo(){setLocationOption();if (mLocationClient != null && !mLocationClient.isStarted()){mLocationClient.start();}if (mLocationClient != null && mLocationClient.isStarted()){mLocationClient.requestLocation();}}/*** 设置百度地图的相关参数*/private void setLocationOption(){LocationClientOption option = new LocationClientOption();option.setOpenGps(true); // 打开gpsoption.setCoorType("bd09ll"); // 设置坐标类型option.setServiceName("com.baidu.location.service_v2.9");option.setPoiExtraInfo(true);option.setAddrType("all");option.setPoiNumber(10);option.disableCache(true);mLocationClient.setLocOption(option);}/*** 监听函数,有更新位置的时候,格式化成字符串,输出到屏幕中 */public class MyLocationListenner implements BDLocationListener {@Overridepublic void onReceiveLocation(BDLocation location){if (location == null){sendBroadCast("定位失败!");return;}sendBroadCast(location.getAddrStr());}public void onReceivePoi(BDLocation poiLocation){if (poiLocation == null){sendBroadCast("定位失败!");return;}sendBroadCast(poiLocation.getAddrStr());}}/*** 得到发送⼴播* @param address*/public void sendBroadCast(String address){stopLocationClient();Intent intent = new Intent(MainActivity.LOCATION_BCR);intent.putExtra("address", address);sendBroadcast(intent);}}三、主程序MainActivitypublic class MainActivity extends Activity{public static String TAG = "LocTestDemo";private BroadcastReceiver broadcastReceiver;public static String LOCATION_BCR = "location_bcr";private Button locBtn;private TextView locInfo;private MyApplication application;@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(yout.activity_main);application=(MyApplication)super.getApplication();initialize();initializeViews();initializeListeners();}private void initialize(){registerBroadCastReceiver();//注册⼴播}private void initializeViews(){locBtn = (Button) findViewById(R.id.location);locInfo = (TextView) findViewById(R.id.location_info);}private void initializeListeners(){locBtn.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v){locInfo.setText("定位中...");//调⽤请求定位信息application.requestLocationInfo();}});}/*** 注册⼀个⼴播,监听定位结果,接受⼴播获得地址信息*/private void registerBroadCastReceiver(){broadcastReceiver = new BroadcastReceiver(){public void onReceive(Context context, Intent intent){String address = intent.getStringExtra("address");locInfo.setText(address);}};IntentFilter intentToReceiveFilter = new IntentFilter();intentToReceiveFilter.addAction(LOCATION_BCR);registerReceiver(broadcastReceiver, intentToReceiveFilter);}@Overrideprotected void onDestroy(){super.onDestroy();unregisterReceiver(broadcastReceiver);}}四、 AndroidManifest.xml配置信息<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="/apk/res/android"package="com.jereh.baidulocation"android:versionCode="1"android:versionName="1.0" ><uses-sdkandroid:minSdkVersion="8"android:targetSdkVersion="17" /><applicationandroid:name="com.jereh.baidulocation.MyApplication"android:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" ><activityandroid:name="com.jereh.baidulocation.MainActivity"android:label="@string/app_name" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="UNCHER" /></intent-filter></activity><serviceandroid:name="com.baidu.location.f"android:enabled="true"android:process=":remote" ><intent-filter><action android:name="com.baidu.location.service_v2.2" ></action></intent-filter></service></application><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" > </uses-permission><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" ></uses-permission><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" ></uses-permission><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" > </uses-permission><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" /><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" > </uses-permission><uses-permission android:name="android.permission.READ_LOGS" ></uses-permission><uses-permission android:name="android.permission.VIBRATE" /><uses-permission android:name="android.permission.WAKE_LOCK" /><uses-permission android:name="android.permission.WRITE_SETTINGS" /></manifest>。
基于Android平台和百度地图API的定位系统
基于Android平台和百度地图API的定位系统
基于Android平台和百度地图API的定位系统
王万丽
【期刊名称】《电脑编程技巧与维护》
【年(卷),期】2017(000)018
【摘要】随着当前智能⼿机的⼴泛普及,⼿机APP的开发具有⼴泛的市场前景,在众多APP中定位技术越来越受到⼴⼤APP开发商的青睐.以当前应⽤极为⼴泛的⼿机操作系统——Android系统和由百度推出的百度地图API为基础,研究设计了⼀款具有定位功能的APP.
【总页数】2页(47-48)
【关键词】定位;Android平台;百度地图API
【作者】王万丽
【作者单位】包头轻⼯职业技术学院互联⽹技术学院,内蒙古包头014035【正⽂语种】中⽂
【中图分类】
【相关⽂献】
1.⼀种基于Android平台与百度地图API的旅游助⼿[J], 匡剑波; 任昱果; 黄晓洋
2.基于Android平台的百度地图开发研究 [J], 张波; 赵双明
3.基于Android与百度地图的智能报警系统 [J], 丁⼀; ⾦华; 李允俊
4.基于百度地图API的GPS定位系统简介 [J], 朱润桤
5.基于GPRS和百度地图API的⽕灾定位系统 [J], 赵意鹏; 赵河明; 邓星星; 张树云; 连云飞。
Android6.0使用BaiDu地图SDK动态获取定位权限
Android6.0使⽤BaiDu地图SDK动态获取定位权限1.报错原因:在集成百度地图SDK的时候在⼿机上⽆法定位,检查没有任何错误,最后通过搜索才知道是Android版本为6.0的问题,这是因为在Android6.0采⽤了运⾏时权限(RuntimePermissions),Android6.0的权限⼀般分为两种,⼀种时普通权限,可以直接获取,其它的运⾏时权限,需要提⽰⽤户⼿动同意之后,才能获取。
失败的原因就是,⼩⽶⼿机MIUI是Android6.0.1,如果不加动态获取权限的代码,是不会提⽰的,没有得到权限,当然⽆法定位。
2.解决代码:private static final int BAIDU_READ_PHONE_STATE =100;public void showContacts(){if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)!= PackageManager.PERMISSION_GRANTED|| ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)!= PackageManager.PERMISSION_GRANTED|| ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE)!= PackageManager.PERMISSION_GRANTED) {Toast.makeText(getApplicationContext(),"没有权限,请⼿动开启定位权限",Toast.LENGTH_SHORT).show();// 申请⼀个(或多个)权限,并提供⽤于回调返回的获取码(⽤户定义)ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.READ_PHONE_STATE}, BAIDU_READ_P }else{init();}}//Android6.0申请权限的回调⽅法@Overridepublic void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {super.onRequestPermissionsResult(requestCode, permissions, grantResults);switch (requestCode) {// requestCode即所声明的权限获取码,在checkSelfPermission时传⼊case BAIDU_READ_PHONE_STATE:if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {// 获取到权限,作相应处理(调⽤定位SDK应当确保相关权限均被授权,否则可能引起定位失败)init();} else {// 没有获取到权限,做特殊处理Toast.makeText(getApplicationContext(), "获取位置权限失败,请⼿动开启", Toast.LENGTH_SHORT).show();}break;default:break;}}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_main);textureMapView = (TextureMapView) findViewById(R.id.mBaidumapView);//判断是否为android6.0系统版本,如果是,需要动态添加权限if (Build.VERSION.SDK_INT>=23){showContacts();}else{init();//init为定位⽅法}}。
百度地图API的使用方法
百度地图API的使用方法开始学习百度地图API最简单的方式是看一个简单的示例。
以下代码创建了一个520x340大小的地图区域并以天安门作为地图的中心:1.<html>2.<head>3.<meta http-equiv="Content-Type"content="text/html;charset=utf-8"/>4.<title>Hello,World</title>5.<script type="text/javascript"src="/api?key=46ce9d0614bf7aefe0ba562f8cf 87194&v=1.0&services=false"></script>6.</head>7.<body>8.<div style="width:520px;height:340px;border:1px solid gray"id="container"></div>9.</body>10.</html>11.12.<html><head><meta http-equiv="Content-Type"content="text/html;charset=utf-8"/><title>Hello,World</title><script type="text/javascript"src="/api?key=46ce9d0614bf7aefe0ba562f8cf87 194&v=1.0&services=false"></script></head><body><div style="width:520px;height:340px;border:1px solid gray"id="container"></div></body></html>1.<script type="text/javascript">2.var map=new BMap.Map("container");//创建地图实例3.var point=new BMap.Point(116.404,39.915);//创建点坐标4.map.centerAndZoom(point,15);//初始化地图,设置中心点坐标和地图级别5.</script>6.<script type="text/javascript">var map=new BMap.Map("container");//创建地图实例var point=new BMap.Point(116.404,39.915);//创建点坐标map.centerAndZoom(point,15);//初始化地图,设置中心点坐标和地图级别</script>引用百度地图API文件当您引用地图API文件时,需要使用自己申请的API密钥。
百度地图定位
Android百度地图定位需求:(和前面的google定位(标题为:定时器timer…)需求一致)设置上午(am)8:00-----12:00 每隔3分钟提交一次位置信息(经纬度)设置下午(pm)13:00-----22:00 每隔4分钟提交一次位置信息(经纬度)时间间隔是可以后台手动设置的需要liblocSDK3.so ,locSDK_3.3.jar告诫:网上很多例如android 基于百度地图api获取经纬度的文章里面用的是(如下代码)对我的需求没用,定位的时间完全不准确,例如1分钟上传一次,结果相差30s左右,才得到数据而且不是固定的。
错误的代码(至少对于我的需求是错的),感觉这方法不好大体的代码是这样的:/*** 创建Activity(继承com.baidu.mapapi.MapActivity)*/public class LocationActivity extends MapActivity implements LocationListener { private BMapManager mapManager;private MKLocationManager mLocationManager = null;private TextView latText;private TextView lonText;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.main);latText = (TextView) findViewById(t);lonText = (TextView) findViewById(R.id.lon);// 初始化MapActivitymapManager = new BMapManager(getApplication());// init方法的第一个参数需填入申请的API KeymapManager.init("C66C0501D028*******A6957C42543AE38F5D540", null);super.initMapActivity(mapManager);mLocationManager = mapManager.getLocationManager();// 注册位置更新事件mLocationManager.requestLocationUpdates(this);// 使用GPS定位mLocationManager.enableProvider((int) MKLocationManager.MK_GPS_PROVIDER);}/*** 当位置发生变化时触发此方法** @param location 当前位置*/public void onLocationChanged(Location location) {if (location != null) {// 显示定位结果lonText.setText("当前经度:" + location.getLongitude());latText.setText("当前纬度:" + location.getLatitude());}}}我的代码闹钟定时器启动service:public class LocationService extends Service @Overridepublic void onCreate() {ExitClass.getInstance().addService(this);super.onCreate();spPreferences = getSharedPreferences("PHONE", MODE_PRIVATE);tmpph = spPreferences.getString("phone", "");locationClient = newLocationClient(LocationService.this);LocationClientOption option = newLocationClientOption();option.setOpenGps(true);option.setAddrType("all");// 返回的定位结果包含地址信息option.setCoorType("bd09ll");// 返回的定位结果是百度经纬度,默认值gcj02// option.setScanSpan(5000);// 设置发起定位请求的间隔时间为5000ms// option.disableCache(true);// 禁止启用缓存定位// option.setPoiNumber(5); // 最多返回POI个数// option.setPoiDistance(1000); // poi查询距离// option.setPoiExtraInfo(true); // 是否需要POI的电话和地址等详细信息locationClient.setLocOption(option);locationClient.start();// 注册位置监听器locationClient.registerLocationListener(new BDLocationListener() {public void onReceivePoi(BDLocation location) {}public void onReceiveLocation(BDLocation location) {if (location == null) {return;}latitude = location.getLatitude();longitude = location.getLongitude();Log.e("@@@@@@@@@@@@@@@@@",Calendar.getInstance().getTime()+ "纬度为:" + latitude + "经度为:" + longitude);// 获取当时的时间(24小时制)SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");time = sDateFormat.format(new Date());isPositionAvailable();//上传到服务器}});if(locationClient!= null&& locationClient.isStarted()) {locationClient.requestLocation();} else {Log.d("LocSDK3", "locClient is null or not started");}//这句放在定时器里面执行文- 汉语汉字编辑词条文,wen,从玄从爻。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
工程文件结构:demoApplication.java package com.gy.mymaps;import android.app.Application;import android.content.Context;import android.widget.Toast;import com.baidu.mapapi.BMapManager;import com.baidu.mapapi.MKGeneralListener;import com.baidu.mapapi.map.MKEvent;public class DemoApplication extends Application {private static DemoApplication mInstance = null;public boolean m_bKeyRight = true;BMapManager mBMapManager = null;@Overridepublic void onCreate() {super.onCreate();mInstance = this;initEngineManager(this);}public void initEngineManager(Context context) {if (mBMapManager == null) {mBMapManager = new BMapManager(context);}if (!mBMapManager.init(new MyGeneralListener())) {Toast.makeText(DemoApplication.getInstance().getApplicationContext(),"BMapManager初始化错误!", Toast.LENGTH_LONG).show();}}public static DemoApplication getInstance() {return mInstance;}// 常用事件监听,用来处理通常的网络错误,授权验证错误等static class MyGeneralListener implements MKGeneralListener {public void onGetNetworkState(int iError) {if (iError == MKEvent.ERROR_NETWORK_CONNECT) {Toast.makeText(DemoApplication.getInstance().getApplicationContext(), "您的网络出错啦!",Toast.LENGTH_LONG).show();}else if (iError == MKEvent.ERROR_NETWORK_DA TA) {Toast.makeText(DemoApplication.getInstance().getApplicationContext(), "输入正确的检索条件!",Toast.LENGTH_LONG).show();}// ...}public void onGetPermissionState(int iError) {//非零值表示key验证未通过if (iError != 0) {//鎺堟潈Key閿欒锛�Toast.makeText(DemoApplication.getInstance().getApplicationContext(),"请输入正确的授权Key,并检查您的网络连接是否正常!error: "+iError, Toast.LENGTH_LONG).show();DemoApplication.getInstance().m_bKeyRight = false;}else{DemoApplication.getInstance().m_bKeyRight = true;Toast.makeText(DemoApplication.getInstance().getApplicationContext(),"key认证成功", Toast.LENGTH_LONG).show();}}}}Mainactivity.java:package com.gy.mymaps;import java.util.List;import android.annotation.SuppressLint;import android.app.Activity;import android.content.ContentValues;import android.database.ContentObserver;import android.database.Cursor;import android.graphics.drawable.Drawable;import .Uri;import android.os.Build;import android.os.Bundle;import android.os.Handler;import android.telephony.SmsManager;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;import com.baidu.mapapi.BMapManager;import com.baidu.mapapi.map.ItemizedOverlay;import com.baidu.mapapi.map.MapView;import com.baidu.mapapi.map.OverlayItem;import com.baidu.mapapi.search.MKAddrInfo;import com.baidu.mapapi.search.MKBusLineResult;import com.baidu.mapapi.search.MKDrivingRouteResult;import com.baidu.mapapi.search.MKPoiResult;import com.baidu.mapapi.search.MKSearch;import com.baidu.mapapi.search.MKSearchListener;import com.baidu.mapapi.search.MKShareUrlResult;import com.baidu.mapapi.search.MKSuggestionResult;import com.baidu.mapapi.search.MKTransitRouteResult;import com.baidu.mapapi.search.MKWalkingRouteResult;import api.basestruct.GeoPoint;//import com.gy.msmsend.R;public class MainActivity extends Activity {//UI相关Button mBtnReverseGeoCode = null; // 将坐标反编码为地址Button mBtnGeoCode = null; // 将地址编码为坐标Button msmSend =null; //短信发送按钮//地图相关MapView mMapView = null; // 地图View//搜索相关MKSearch mSearch = null;// 搜索模块,也可去掉地图模块独立使用EditText phoneText;String[] as;String city=null;String pos=null;Drawable marker;int png=0;//protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);/** 注册短信变化事件监听*/SmsContent content = new SmsContent(new Handler());//注册短信变化监听this.getContentResolver().registerContentObserver(Uri.parse("content://sms/"), true, content);//注册短信变化监听/*** 使用地图sdk前需先初始化BMapManager.* BMapManager是全局的,可为多个MapView共用,它需要地图模块创建前创建,* 并在地图地图模块销毁后销毁,只要还有地图模块在使用,BMapManager就不应该销毁*/DemoApplication app = (DemoApplication)this.getApplication();if (app.mBMapManager == null) {app.mBMapManager = new BMapManager(getApplicationContext());/*** 如果BMapManager没有初始化则初始化BMapManager*/app.mBMapManager.init(new DemoApplication.MyGeneralListener());}setContentView(yout.activity_main);CharSequence titleLable="我的位置";setTitle(titleLable);//地图初始化mMapView = (MapView)findViewById(R.id.bmapView);mMapView.getController().enableClick(true);mMapView.getController().setZoom(12);// 初始化搜索模块,注册事件监听mSearch = new MKSearch();mSearch.init(app.mBMapManager, new MKSearchListener() {public void onGetPoiDetailSearchResult(int type, int error) {}public void onGetAddrResult(MKAddrInfo res, int error) {if (error != 0) {String str = String.format("错误号:%d", error);Toast.makeText(MainActivity.this, str, Toast.LENGTH_LONG).show();return;}//地图移动到该点mMapView.getController().animateTo(res.geoPt);if (res.type == MKAddrInfo.MK_GEOCODE){//地理编码:通过地址检索坐标点String strInfo = String.format("纬度:%f 经度:%f", res.geoPt.getLatitudeE6()/1e6, res.geoPt.getLongitudeE6()/1e6);Toast.makeText(MainActivity.this, strInfo, Toast.LENGTH_LONG).show();}if (res.type == MKAddrInfo.MK_REVERSEGEOCODE){//反地理编码:通过坐标点检索详细地址及周边poiString strInfo = res.strAddr;Toast.makeText(MainActivity.this, strInfo, Toast.LENGTH_LONG).show();EditText editGeoCodeKey = (EditText)findViewById(R.id.geocodekey);//设置城市editGeoCodeKey.setText(strInfo);}//生成ItemizedOverlay图层用来标注结果点ItemizedOverlay<OverlayItem> itemOverlay = new ItemizedOverlay<OverlayItem>(null, mMapView);//生成ItemOverlayItem item = new OverlayItem(res.geoPt, "", null);//为maker定义位置和边界marker.setBounds(0, 0, marker.getIntrinsicWidth(), marker.getIntrinsicHeight());//给item设置markeritem.setMarker(marker);//在图层上添加itemitemOverlay.addItem(item);//清除地图其他图层mMapView.getOverlays().clear();//添加一个标注ItemizedOverlay图层mMapView.getOverlays().add(itemOverlay);//执行刷新使生效mMapView.refresh();}public void onGetPoiResult(MKPoiResult res, int type, int error) {}public void onGetDrivingRouteResult(MKDrivingRouteResult res, int error) {}public void onGetTransitRouteResult(MKTransitRouteResult res, int error) {}public void onGetWalkingRouteResult(MKWalkingRouteResult res, int error) {}public void onGetBusDetailResult(MKBusLineResult result, int iError) {}public void onGetSuggestionResult(MKSuggestionResult res, int arg1) {}public void onGetShareUrlResult(MKShareUrlResult result, int type,int error) {// TODO Auto-generated method stub}});// 设定地理编码及反地理编码按钮的响应mBtnReverseGeoCode = (Button)findViewById(R.id.reversegeocode);mBtnGeoCode = (Button)findViewById(R.id.geocode);msmSend = (Button)findViewById(R.id.sendButton);OnClickListener clickListener = new OnClickListener(){public void onClick(View v) {SearchButtonProcess(v);}};mBtnReverseGeoCode.setOnClickListener(clickListener);mBtnGeoCode.setOnClickListener(clickListener);msmSend.setOnClickListener(clickListener);}/*** 发起搜索* @param v*/void SearchButtonProcess(View v) {if (mBtnReverseGeoCode.equals(v)) {EditText lat = (EditText)findViewById(t);EditText lon = (EditText)findViewById(R.id.lon);//得到需要标在地图上的资源marker = getResources().getDrawable(R.drawable.ic_mark0);GeoPoint ptCenter = new GeoPoint((int)(Float.valueOf(lat.getText().toString())*1e6),(int)(Float.valueOf(lon.getText().toString())*1e6));//反Geo搜索mSearch.reverseGeocode(ptCenter);} else if (mBtnGeoCode.equals(v)) {EditText editCity = (EditText)findViewById(R.id.city);EditText editGeoCodeKey = (EditText)findViewById(R.id.geocodekey);//得到需要标在地图上的资源marker = getResources().getDrawable(R.drawable.ic_mark0);//Geo搜索mSearch.geocode(editGeoCodeKey.getText().toString(),editCity.getText().toString());}else if (msmSend.equals(v)){phoneText = (EditText)findViewById(R.id.tel);//发送短信sendMessage();}}@Overrideprotected void onPause() {mMapView.onPause();super.onPause();}@Overrideprotected void onResume() {mMapView.onResume();super.onResume();}@Overrideprotected void onDestroy() {mMapView.destroy();mSearch.destory();super.onDestroy();}@Overrideprotected void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);mMapView.onSaveInstanceState(outState);}@Overrideprotected void onRestoreInstanceState(Bundle savedInstanceState) {super.onRestoreInstanceState(savedInstanceState);mMapView.onRestoreInstanceState(savedInstanceState);}/****/private void sendMessage() {// 获取文本框中的内容String phone_num = phoneText.getText().toString();String content ="QUERY";SmsManager smsMagager = SmsManager.getDefault();if (content.length() > 70) {List<String> sms = smsMagager.divideMessage(content);for (String con : sms) {smsMagager.sendTextMessage(phone_num, null, con, null, null);}} else {smsMagager.sendTextMessage(phone_num, null, content, null, null);}Toast.makeText(MainActivity.this,, Toast.LENGTH_LONG).show();}/** 监听短信数据库*/class SmsContent extends ContentObserver {private Cursor cursor = null;@SuppressLint("ShowToast")public SmsContent(Handler handler) {super(handler);// TODO Auto-generated constructor stu}@SuppressWarnings("deprecation")@Overridepublic void onChange(boolean selfChange) {// TODO Auto-generated method stubsuper.onChange(selfChange);EditText phonenum=(EditText)findViewById(R.id.tel);String telnum="+86"+phonenum.getText().toString();// 读取收件箱中指定号码的短信cursor = managedQuery(Uri.parse("content://sms/inbox"),new String[] { "_id", "address", "read", "body" }," address=? and read=?",new String[] {telnum,"0" }, "_id desc");// 按id排序,如果按date排序的话,修改手机时间后,读取的短信就不准了if (cursor != null && cursor.getCount() > 0) {ContentValues values = new ContentValues();values.put("read", "1"); // 修改短信为已读模式cursor.moveToNext();int smsbodyColumn = cursor.getColumnIndex("body");String smsBody = cursor.getString(smsbodyColumn);getmypos(smsBody);//开启搜索//经纬度EditText lat = (EditText)findViewById(t);EditText lon = (EditText)findViewById(R.id.lon);//设置输入框的内容lat.setText(as[2]);lon.setText(as[1]);//得到需要标在地图上的资源getpng(png);GeoPoint ptCenter = new GeoPoint((int)(Float.valueOf(lat.getText().toString())*1e6), (int)(Float.valueOf(lon.getText().toString())*1e6));//反Geo搜索mSearch.reverseGeocode(ptCenter);}// 在用managedQuery的时候,不能主动调用close()方法,否则在<a href="/pro/ydad/" target="_blank" class="keylink">Android</a> 4.0+的系统上,会发生崩溃if (Build.VERSION.SDK_INT < 14) {cursor.close();}}}//字符串处理private void getmypos(String str){System.out.println(str = str.replaceAll("\\D", "_").replace("_+", "_"));as = str.split("_+");float a=(float) (Float.valueOf(as[1])/1e6);float b=(float) (Float.valueOf(as[2])/1e6);png=Integer.parseInt(as[5]);as[1]=a+"";as[2]=b+"";}//根据数据中的朝向改变图标private void getpng(int num){switch(num){case 0:marker = getResources().getDrawable(R.drawable.ic_mark0);break;case 1:marker = getResources().getDrawable(R.drawable.ic_mark01);break;case 2:marker = getResources().getDrawable(R.drawable.ic_mark02);break;case 3:marker = getResources().getDrawable(R.drawable.ic_mark03);break;case 4:marker = getResources().getDrawable(R.drawable.ic_mark04);break;case 5:marker = getResources().getDrawable(R.drawable.ic_mark05);break;case 6:marker = getResources().getDrawable(R.drawable.ic_mark06);break;case 7:marker = getResources().getDrawable(R.drawable.ic_mark07);break;case 8:marker = getResources().getDrawable(R.drawable.ic_mark08);break;case 9:marker = getResources().getDrawable(R.drawable.ic_mark09);break;case 10:marker = getResources().getDrawable(R.drawable.ic_mark10);break;case 11:marker = getResources().getDrawable(R.drawable.ic_mark11);break;default:marker = getResources().getDrawable(R.drawable.ic_mark0);break;}}}Activity_main.xml:<RelativeLayout xmlns:android="/apk/res/android"xmlns:tools="/tools"android:layout_width="match_parent" android:layout_height="match_parent"tools:context=".MainActivity"><com.baidu.mapapi.map.MapViewandroid:id="@+id/bmapView"android:layout_width="fill_parent"android:layout_height="fill_parent" android:clickable="true"/><EditTextandroid:id="@+id/lat"android:layout_width="125dp"android:layout_height="wrap_content"android:layout_alignParentLeft="true"android:layout_alignParentTop="true"android:ems="10"android:text="39.904965"/><Buttonandroid:id="@+id/reversegeocode"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignBaseline="@+id/lat"android:layout_alignBottom="@+id/lat"android:layout_alignParentRight="true"android:text="查找"/><Buttonandroid:id="@+id/geocode"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentRight="true"android:layout_alignTop="@+id/geocodekey"android:text="查找"/><Buttonandroid:id="@+id/sendButton"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignBottom="@+id/tel"android:layout_alignParentRight="true"android:text="发送"/><EditTextandroid:id="@+id/lon"android:layout_width="125dp"android:layout_height="wrap_content"android:layout_alignTop="@+id/reversegeocode"android:layout_toRightOf="@+id/lat"android:ems="10"android:text="116.327764"/><EditTextandroid:id="@+id/geocodekey"android:layout_width="250dp"android:layout_height="wrap_content"android:layout_alignParentLeft="true"android:layout_below="@+id/reversegeocode"android:ems="20"android:text="北京市海淀区上地十街10号"><requestFocus/></EditText><EditTextandroid:id="@+id/city"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_below="@+id/reversegeocode"android:layout_toLeftOf="@+id/geocode"android:ems="10"android:text=""/><EditTextandroid:id="@+id/tel"android:layout_width="250dp"android:layout_height="wrap_content"android:layout_alignParentLeft="true"android:layout_below="@+id/geocodekey"android:ems="15"android:text="1503769891"/>"</RelativeLayout>Manifest.xml:<?xml version="1.0"encoding="utf-8"?><manifest xmlns:android="/apk/res/android"package="com.gy.mymaps"android:versionCode="1"android:versionName="1.0"><uses-sdkandroid:minSdkVersion="10"android:targetSdkVersion="10"/><applicationandroid:name="com.gy.mymaps.DemoApplication"android:debuggable="true"android:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme"><meta-dataandroid:name="com.baidu.lbsapi.API_KEY"android:value="O5h23uRrcyxbaiZs3w7skruP"/><activityandroid:name="com.gy.mymaps.MainActivity"android:label="@string/app_name"><intent-filter><action android:name="android.intent.action.MAIN"/><category android:name="UNCHER"/> </intent-filter></activity></application><uses-permission android:name="android.permission.GET_ACCOUNTS"/><uses-permission android:name="E_CREDENTIALS"/> <uses-permission android:name="android.permission.MANAGE_ACCOUNTS"/> <uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.INTERNET"/><uses-permissionandroid:name="uncher.permission.READ_SETTINGS"/> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.BROADCAST_STICKY"/><uses-permission android:name="android.permission.WRITE_SETTINGS"/> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.SEND_SMS"/><uses-permission android:name="android.permission.RECEIVE_SMS"/><!-- 读取消息 --><uses-permission android:name="android.permission.READ_SMS"/><!-- 写入消息 --><uses-permission android:name="android.permission.WRITE_SMS"/><!-- 对屏幕的支持 --><supports-screensandroid:anyDensity="true"android:largeScreens="true"android:normalScreens="false"android:resizeable="true"android:smallScreens="true"/></manifest>String.xml:<?xml version="1.0"encoding="utf-8"?><resources><string name="app_name">mymaps</string><string name="action_settings">Settings</string><string name="info">短信发送成功</string></resources>该app是通过发送QUEST到一个返回位置信息的设备,返回的短信接收的短信格式(可以通过修改字符串处理方法来修改处理方法):#Lon=116486291,Lat=39899332,Speed=0,Alt=65,Direction=0#。