Android下实现GPS定位服务

1.申请Google API Key,参考前面文章

2.实现GPS的功能需要使用模拟器进行经纬度的模拟设置,请参考前一篇文章进行设置

3.创建一个Build Target为Google APIs的项目

4.修改Androidmanifest文件:

 

view plain
  1. <uses-library android:name="com.google.android.maps" />  
  2. <uses-permission android:name="android.permission.INTERNET"/>  
  3.      <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>  
  4.      <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>  

 

5.修改main.xml文件

 

view plain
  1. <com.google.android.maps.MapView  
  2.     android:id="@+id/MapView01"  
  3.     android:layout_width="fill_parent"  
  4.     android:layout_height="fill_parent"  
  5.     android:apiKey="0f8FBFJliR7j_7aNwDxClBv6VW8O12V2Y21W_CQ"/>  

 

注意:这里的apiKey值请相应修改为自己的key值

6.代码清单:

 

 

view plain
  1. package com.hoo.android.LocationMap;  
  2. import java.io.IOException;  
  3. import java.util.List;  
  4. import java.util.Locale;  
  5. import android.content.Context;  
  6. import android.graphics.Bitmap;  
  7. import android.graphics.BitmapFactory;  
  8. import android.graphics.Canvas;  
  9. import android.graphics.Paint;  
  10. import android.graphics.Point;  
  11. import android.location.Address;  
  12. import android.location.Criteria;  
  13. import android.location.Geocoder;  
  14. import android.location.Location;  
  15. import android.location.LocationListener;  
  16. import android.location.LocationManager;  
  17. import android.os.Bundle;  
  18. import android.widget.TextView;  
  19. import com.google.android.maps.GeoPoint;  
  20. import com.google.android.maps.MapActivity;  
  21. import com.google.android.maps.MapController;  
  22. import com.google.android.maps.MapView;  
  23. import com.google.android.maps.Overlay;  
  24. public class ActivityLocationMap extends MapActivity   
  25. {  
  26.     public MapController mapController;  
  27.     public MyLocationOverlay myPosition;  
  28.     public MapView myMapView;  
  29.       
  30.     public void onCreate(Bundle savedInstanceState) {  
  31.         super.onCreate(savedInstanceState);  
  32.         setContentView(R.layout.main);  
  33.         //取得LocationManager实例  
  34.         LocationManager locationManager;  
  35.         String context=Context.LOCATION_SERVICE;  
  36.         locationManager=(LocationManager)getSystemService(context);  
  37.         myMapView=(MapView)findViewById(R.id.MapView01);  
  38.         //取得MapController实例,控制地图  
  39.         mapController=myMapView.getController();  
  40.         //设置显示模式为街景模式  
  41.         myMapView.setStreetView(true);  
  42.           
  43.         //*************使用系统自带的控件放大缩小视图***************************  
  44.         //取得MapController对象(控制MapView)  
  45.         mapController = myMapView.getController();   
  46.         //设置地图支持设置模式  
  47.         myMapView.setEnabled(true);  
  48.         //设置地图支持点击  
  49.         myMapView.setClickable(true);     
  50.         //设置缩放控制,这里我们自己实现缩放菜单  
  51.         myMapView.displayZoomControls(true);    
  52.         myMapView.setBuiltInZoomControls(true);   
  53.         //*******************************************************************       
  54.         设置设置地图目前缩放大小倍数(从1到21)  
  55.         mapController.setZoom(17);  
  56.         //设置使用MyLocationOverlay来绘图  
  57.         myPosition=new MyLocationOverlay();  
  58.           
  59.         List<Overlay> overlays=myMapView.getOverlays();  
  60.         overlays.add(myPosition);  
  61.         //设置Criteria(标准服务商)的信息  
  62.         Criteria criteria =new Criteria();  
  63.         //*****设置服务商提供的精度要求,以供筛选提供商************************  
  64.         criteria.setAccuracy(Criteria.POWER_HIGH);//表明所要求的经纬度的精度              
  65.         criteria.setAltitudeRequired(false); //高度信息是否需要提供  
  66.         criteria.setBearingRequired(false);  //压力(气压?)信息是否需要提供  
  67.         criteria.setCostAllowed(false);  //是否会产生费用  
  68.         criteria.setPowerRequirement(Criteria.POWER_MEDIUM);//最大需求标准  
  69.         //*****************************************************  
  70.         //取得效果最好的criteria  
  71.         String provider=locationManager.getBestProvider(criteria, true);  
  72.         //得到坐标相关的信息  
  73.         Location location=locationManager.getLastKnownLocation(provider);  
  74.         //更新位置信息  
  75.         updateWithNewLocation(location);  
  76.         //注册一个周期性的更新,3000ms更新一次,0代表最短距离  
  77.         //locationListener用来监听定位信息的改变(OnLocationChanged)  
  78.         locationManager.requestLocationUpdates(provider, 30000,locationListener);  
  79.     }  
  80.       
  81.     //更新位置信息  
  82.     private void updateWithNewLocation(Location location)   
  83.     {  
  84.         String latLongString; //声明经纬度的字符串  
  85.         TextView myLocationText = (TextView)findViewById(R.id.TextView01);  
  86.         //初始化地址为没有找到,便于处理特殊情况  
  87.         String addressString="没有找到地址/n";  
  88.         if(location!=null)  
  89.         {  
  90.             //****************获取当前的经纬度,并定位到目标*************************  
  91.             //为绘制标志的类设置坐标  
  92.             myPosition.setLocation(location);  
  93.             //取得经度和纬度  
  94.             Double geoLat=location.getLatitude()*1E6;  
  95.             Double geoLng=location.getLongitude()*1E6;  
  96.             //将其转换为int型  
  97.             GeoPoint point=new GeoPoint(geoLat.intValue(),geoLng.intValue());  
  98.             //定位到指定坐标  
  99.             mapController.animateTo(point);  
  100.             //*********************************************************************  
  101.             double lat=location.getLatitude();  //获得经纬度  
  102.             double lng=location.getLongitude();  
  103.             latLongString="经度:"+lat+"/n纬度:"+lng;   //设置经纬度字符串  
  104.               
  105.            // double latitude=location.getLatitude();  
  106.             //double longitude=location.getLongitude();  
  107.             //根据地理位置来确定编码  
  108.             Geocoder gc=new Geocoder(this,Locale.getDefault());  
  109.             try  
  110.             {  
  111.                 //取得地址相关的一些信息:经度、纬度  
  112.                 List<Address> addresses=gc.getFromLocation(lat, lng,1);  
  113.                 StringBuilder sb=new StringBuilder();  
  114.                 if(addresses.size()>0)  
  115.                 {  
  116.                     Address address=addresses.get(0);  
  117.                     for(int i=0;i<address.getMaxAddressLineIndex()-1;i++)  
  118.                         sb.append(address.getAddressLine(i)).append(",");                       
  119.                         //获得地址sb.append(address.getLocality()).append("/n");  
  120.                         //获得邮编sb.append(address.getPostalCode()).append("/n");  
  121.                         sb.append(address.getCountryName());  
  122.                         addressString=sb.toString();  
  123.                 }  
  124.             }catch(IOException e){}  
  125.         }  
  126.         else  
  127.         {  
  128.             latLongString="没有找到坐标./n";  
  129.         }  
  130.         //显示  
  131.         myLocationText.setText("您当前的位置如下:/n"+latLongString+"/n"+addressString);  
  132.     }  
  133.     //监听位置信息的改变  
  134.     private final LocationListener locationListener=new LocationListener()  
  135.     {  
  136.         //当坐标改变时触发此函数  
  137.         public void onLocationChanged(Location location)  
  138.         {  
  139.             updateWithNewLocation(location);  
  140.         }  
  141.         //Provider被disable时触发此函数,比如GPS被关闭   
  142.         public void onProviderDisabled(String provider)  
  143.         {  
  144.             updateWithNewLocation(null);  
  145.         }  
  146.         //Provider被enable时触发此函数,比如GPS被打开  
  147.         public void onProviderEnabled(String provider){}  
  148.         //Provider的转态在可用、暂时不可用和无服务三个状态直接切换时触发此函数  
  149.         public void onStatusChanged(String provider,int status,Bundle extras){}  
  150.     };  
  151.     //方法默认是true,服务器所知的状态列信息是否需要显示  
  152.     protected boolean isRouteDisplayed()  
  153.     {  
  154.         return false;  
  155.     }  
  156.       
  157.     class MyLocationOverlay extends Overlay  
  158.     {  
  159.         Location mLocation;  
  160.         //在更新坐标,以便画图  
  161.         public void setLocation(Location location)  
  162.         {  
  163.             mLocation = location;  
  164.         }  
  165.         @Override  
  166.         public boolean draw(Canvas canvas, MapView mapView, boolean shadow, long when)  
  167.         {  
  168.             super.draw(canvas, mapView, shadow);              
  169.             Paint paint = new Paint();  
  170.             Point myScreenCoords = new Point();  
  171.             // 将经纬度转换成实际屏幕坐标  
  172.             GeoPoint tmpGeoPoint = new GeoPoint((int)(mLocation.getLatitude()*1E6),(int)(mLocation.getLongitude()*1E6));      
  173.             mapView.getProjection().toPixels(tmpGeoPoint, myScreenCoords);  
  174.             //*********paint相关属性设置*********  
  175.             paint.setStrokeWidth(0);//文  
  176.             paint.setARGB(25525500);  
  177.             paint.setStyle(Paint.Style.STROKE);  
  178.             //***********************************  
  179.             Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.green_dot);  
  180.             canvas.drawBitmap(bmp, myScreenCoords.x, myScreenCoords.y, paint);  
  181.             canvas.drawText("您目前的位置", myScreenCoords.x, myScreenCoords.y, paint);  
  182.             return true;  
  183.         }  
  184.     }  
  185. }  

 

代码参考网络,加以修改优化,谢谢

7.程序运行截图,前提是在命令行下输入geo fix 121.5 31.24(定位到上海东方明珠),在命令行下可以输入其他坐标,系统会根据坐标显示其他位置,如接着输入geo fix 113.325 23.113(定位到广州海心沙),不知为什么输入坐标的时候经常会不识别,有时能够成功而有时不行,郁闷,求解……

转载于:https://www.cnblogs.com/Free-Thinker/p/3606475.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/273826.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DEDECMS全版本gotopage变量XSS ROOTKIT 0DAY

影响版本&#xff1a; DEDECMS全版本 漏洞描叙&#xff1a; DEDECMS后台登陆模板中的gotopage变量未效验传入数据&#xff0c;导致XSS漏洞。 \dede\templets\login.htm 65行左右 <input type"hidden" name"gotopage" value"<?php if(!empty($g…

Android开源库loopj的android-async-http的 JsonHttpResponseHandler 存在死循环GC_CONCURRENT

我现在用的是 AndroidAsyncHttp 1.4.4 版本&#xff0c;之前遇到一个很奇怪的问题&#xff0c; 当使用 JsonHttpResponseHandler 解析请求的页面出现服务器错误或其他情况返回的内容不是 JSON 字符串时不会调用自己复写实现的 onSuccess 或者 onFailure 方法&#xff0c;将会出…

进程状态转换(了解)

进程三个基本状态&#xff1a;就绪、阻塞、运行 这个比较简单&#xff0c;进程创建后进入就绪状态、然后若CPU空闲或能打断CPU正在执行的进程&#xff08;优先级低的&#xff09;&#xff0c;那么就绪状态转换成运行态&#xff0c;运行时&#xff0c;进程需要用到其他资源&…

2014阿里巴巴校园招聘笔试题 - 中南站

转载于:https://www.cnblogs.com/gotodsp/articles/3530329.html

Spring的IOC原理[通俗解释一下]

1. IoC理论的背景 我们都知道&#xff0c;在采用面向对象方法设计的软件系统中&#xff0c;它的底层实现都是由N个对象组成的&#xff0c;所有的对象通过彼此的合作&#xff0c;最终实现系统的业务逻辑。 图1&#xff1a;软件系统中耦合的对象 如果我们打开机械式手表的后盖&am…

以嵌入式系统设计师考试成绩,开始嵌入式博客之旅

http://www.rkb.gov.cn/jsj/cms/s_contents/download/s_dt201003110106.html 转载于:https://www.cnblogs.com/yueqian-scut/p/3952268.html

SSH框架配置及Maven使用

1.SSH框架配置 1.1. SSH框架介绍 1.2. SSH框架配置 所需资源下载&#xff1a; l jdk; 从Oracle官方网站&#xff1a;http://www.oracle.com/technetwork/cn/java/javase/downloads/index.html下载jdk&#xff0c;win7是默认安装在C:\Program Files (x86)\Java\jdk1.6.0_25路径下…

Flask 从入门到熟悉(不敢称为精通)

文章目录2.1 Flask介绍及其安装2.2 Virtualenv3.1 一个最小的应用3.2 外部课件服务器3.3 调试模式4.1 路由介绍4.2 变量规则4.3 构建URL4.4 HTTP 方法4 总结5.1 静态文件5.2 渲染模板5.3 练习66.1 接收请求数据6.2 请求对象6.3 文件上传6.4 Cookies6 总结77.1 重定向和错误7.2 …

Ext JS 5 beta版发布

原文&#xff1a;Announcing Public Beta of Ext JS 5我们非常高兴的宣布&#xff0c;Sencha Ext JS 5 beta版本开始进行公测了。这个beta版本可以让你、我们Sencha社区来对我们的Ext JS 5的工作进度进行评测。对于所以Ext JS开发人员&#xff0c;这事一个很好的机会来协助完成…

关于癌症的十大谣言

最近&#xff0c;国外网站总结了西方社会中流行的十个关于癌症的谣言&#xff0c;其中很多谣言在我们周围也有广泛的传播。 谣言1&#xff1a;癌症是人为导致的现代疾病 或许在公众的认知里&#xff0c;癌症在今天要比历史上任何时期都重要。不过实际上&#xff0c;癌症可不是一…

[python 进阶] 第7章 函数装饰器和闭包

文章目录7.1 装饰器基础知识7.2 Python何时执行装饰器7.3 使用装饰器改进“策略”7.4 变量作用域(global)备注 -比较字节码&#xff08;暂略&#xff09;7.5 闭包7.6 nonlocal声明global和nonlocal的区别7.7 实现一个简单的装饰器7.8 标准库中的装饰器7.8.1 使用functools.lru_…

自制“低奢内”CSS3登入表单,包含JS验证,请别嫌弃哦。

要求 必备知识 基本了解CSS语法,初步了解CSS3语法知识。和JS/JQuery基本语法。 开发环境 Adobe Dreamweaver CS6 演示地址 演示地址 预览截图(抬抬你的鼠标就可以看到演示地址哦): 制作步骤: 一, html结构 <div id"home"><form id"login" class…

class里面只能写以下5种

转载于:https://www.cnblogs.com/phplearnings/p/3650849.html

【排序】算法(python实现)

文章目录python 排序算法1 插入排序1.1 直接插入排序算法思想1.2 希尔排序算法思想2. 选择排序2.1 简单选择排序2.2 堆排序参考python 排序算法 1 插入排序 1.1 直接插入排序 算法思想 直接插入排序的核心思想就是&#xff1a;将数组中的所有元素依次跟前面已经排好的元素相…

OpenSSL漏洞补救办法详解(转)

CVE-2014-0160漏洞背景 2014年4月7日OpenSSL发布了安全公告&#xff0c;在OpenSSL1.0.1版本中存在严重漏洞(CVE-2014-0160)。OpenSSL Heartbleed模块存在一个BUG&#xff0c;问题存在于ssl/dl_both.c文件中的心跳部分&#xff0c;当攻击者构造一个特殊的数据包&#xff0c;满足…

SharePoint 自定义WebPart之间的连接

1、创建SharePoint解决方案&#xff0c;添加两个WebPart分别用来发送和接收&#xff1b; 2、发送值的WebPart需要继承自IWebPartField(当然&#xff0c;根据需要还可以选择IWebPartField,IWebPartParameters,IWebPartRow,IWebPartTable&#xff0c;具体参见msdn)&#xff0c;原…

C# 基础备忘录

1. decimal 类型调用ToString()方法后没把末尾的0去掉的解决办法: 例子&#xff1a;decimal? money Convert.ToDecimal(10.8950);string moneyStrmoney.Value.ToString(); 结果在同一台机子&#xff0c;两个项目里面会出现两个不同的结果。结果一&#xff1a;moneyStr"1…

PDFlib免费下载地址及详细介绍手册

PDFlib是一个用于创建PDF文档的开发工具,也可直接在你的服务器端产生PDF输出, 可利用PDFLib提供的简单易用的API&#xff08;应用编程接口&#xff09;在服务器或客户端产生PDF文档, PDFlib在生成PDF文档时不需要第3方软件的支持,也不需要其它工具。此产品属于产品 PDFlibPDI 的…

关于VS2010帮助文档的使用和VC6.0在Win7 64位下的使用

由于购置了新的电脑&#xff0c;安装的是Win7 64位的操作系统&#xff0c;这两天我在重新安装编程环境的时候遇到一些问题&#xff0c;现在都解决掉了&#xff0c;分享出来以供需要的人参考。 一、以前使用的是VS2008&#xff0c;从VC6到2008这么多年了一只使用的MSDN是带索引的…

谷歌Android各版本的代号变迁

简单回顾下Android发展历程2003年10月&#xff0c;Andy Rubin&#xff08;安迪鲁宾&#xff09;等人创建Android公司&#xff0c;并组建Android团队。2005年8月17日&#xff0c;Google低调收购了成立仅22个月的高科技企业Android及其团队。安迪鲁宾成为Google公司工程部副总裁&…