基于Android的GPS定位功能, 通过GPS定位获取地理位置坐标, 并且解析坐标信息向google请求坐标的详细位置(直接返回所在的位置信息,如城市名称等)。
船营网站制作公司哪家好,找创新互联!从网页设计、网站建设、微信开发、APP开发、响应式网站设计等网站项目制作,到程序开发,运营维护。创新互联从2013年创立到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联。
您好,很高兴为您服务!安卓实现定位的方式有四种哦!1:高精准度(使用wifi,移动数据,gps)定位2:中精准度(使用gps单独定位)3:低精准度(使用网络大致定位)4:模拟位置(打开开发者选项允许模拟位置后您的位置是想定位在哪都可以的哦!)
您好,很高兴为您解答。
一、准备工作
需要如下三种软件:
1. Eclipse
2. Android SDK
3. 开发Android程序的Eclipse 插件
为了开始我们的工作,首先要安装Eclipse,然后从Google的网站获得Android SDK,并且安装Eclipse插件。
二、Activity类
每一种移动开发环境都有自己的基类。如J2ME应用程序的基类是midlets,BREW的基类是applets,而Android程序的基类是 Activity。这个activity为我们提供了对移动操作系统的基本功能和事件的访问。这个类包含了基本的构造方法,键盘处理,挂起来恢复功能,以 及其他底层的手持设备的访问。实质上,我们的应用程序将是一个Activity类的扩展。在本文中读者将会通过例子学习到如何使用Activity类来编 写Android程序。下面是一个简单的继承Activity的例子。
public class LocateMe extends Activity{
public void onCreate(Bundle params){
super.onCreate(params);
setContentView(R.layout.main);
}
public boolean onKeyDown(int keyCode, KeyEvent event){
return true;
}
}
三 View类
View类是Android的一个超类,这个类几乎包含了所有的屏幕类型。但它们之间有一些不同。每一个view都有一个用于绘画的画布。这个画布可以用 来进行任意扩展。本文为了方便起见,只涉及到了两个主要的View类型:定义View和Android的XML内容View。在上面的代码中,使用的是 “Hello World” XML View,它是以非常自然的方式开始的。
如果我们查看一下新的Android工程,就会发现一个叫main.xml的文件。在这个文件中,通过一个简单的XML文件,描述了一个屏幕的布局。这个 简单的xml文件的内容如下:
?xml version="1.0" encoding="utf-8"?
RelativeLayout xmlns:android=""
androidrientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_centerHoriz
android:text="ress the center key to locate yourself"
/
/RelativeLayout
上面的内容的功能看起来非常明显。这个特殊文件定义了一个相关的布局,这就意味着通过一个元素到另一个元素的关系或是它们父元素的关系来描述。对于视图来 说,有一些用于布局的方法,但是在本文中只关注于上述的xml文件。
RealtiveLayout中包含了一个填充整个屏幕的文本框(也就是我们的LocateMe activity)。这个LocateMe activity在默认情况下是全屏的,因此,文本框将继承这个属性,并且文本框将在屏幕的左上角显示。另外,必须为这个XML文件设置一个引用数,以便 Android可以在源代码中找到它。在默认情况下,这些引用数被保存在R.java中,代码如下:
public final class R{
public static final class layout{
public static final int main=0x7f030001;
}
}
视图也可以被嵌套,但和J2ME不同,我们可以将定制的视图和Android团队发布的Widgets一起使用。在J2ME中,开发人员被迫选择 GameCanvas和J2ME应用程序画布。这就意味着如果我们想要一个定制的效果,就必须在GameCanvas上重新设计我们所有的widget。 Android还不仅仅是这些,视图类型也可以混合使用。Android还带了一个 widget库,这个类库包括了滚动条,文本实体,进度条以及其他很多控件。这些标准的widget可以被重载或被按着我们的习惯定制。现在让我们来进入 我们的例子。
四、Android实例
这个演示应用程序将演示了用户的当前的经度和纬度(在文本框中显示)。onCreate构造方法将和上面的例子基本相同,除了在其中加入了键盘处理,现在 让我们看一下onKeyDown的代码。
public boolean onKeyDown(int keyCode, KeyEvent event){
if(keyCode != KeyEvent.KEYCODE_DPAD_CENTER || m_bLoading)
{
return true;
}
m_bLoading = true;
getLocation();
return true;
}
下面让我们来解释一下这段代码,首先,这段代码检查了当前被按下的键,但还没有开始处理。而是在getLocation方法中处理这一切的。然后,将装载 flag标志以及调用getLocation方法,下面是getLocation方法的代码。
private void getLocation(){
Location loc;
LocationManager locMan;
LocationProvider locPro;
ListLocationProvider proList;
setContentView(R.layout.laoding);
locMan = (LocationManager) getSystemService(LOCATION_SERVICE);
proList = locMan.getProviders();
locPro = proList.get(0);
loc = locMan.getCurrentLocation(locPro.getName());
Lat = (float)loc.getLatitude();
Lon = (float)loc.getLongitude();
CreateView();
setContentView(customView);
}
到这为止,程序开始变得更有趣了。但是不幸的是,Google关于之方面的文档还是比较少了。在程序的变量声明之后,我们需要演示一些装载信息。 R.layout.loading符合了另一个简单的XML布局视图。通过简单地调用setContentView方法可以使用转载信息重绘屏幕。
读者要注意的是:在编译时,Android会预先将所有的XML布局数据包装起来。如果我们想在编译后变化布局属性,按着规定,我们必须在源程序中做这些 事。
获得LocationManager的唯一方法是通过getSystemService()方法的调用。通过使用LocationManager, 我们可以获得一个位置提供者的列表。在一个真实的手持设备中,这个列表包含了一些GPS服务。实际上,我们希望选择更强大,更精确,最后不带有其他附加服 务的GPS。现在,在模拟器中提供了一个用于测试的GPS,这个GPS来自San Francisco。定制的GPS文件可以可以被上传,并进行测试。如果我们要测试更复杂的应用,来自San Francisco的GPS可能并不适合。
目前我们可以使用位置管理器和位置提供者进行getCurrentLocation的调用。这个方法返回本机的当前位置的一个快照,这个快照将以 Location对象形式提供。在手持设备中,我们可以获得当前位置的经度和纬度。现在,使用这个虚拟的手持设备,我们可以获得这个例子程序的最终结果: 建立了显示一个定制的视图。
五、使用定制视图
在最简单的窗体中,一个Android中的视图仅仅需要重载一个onDraw方法。定制视图可以是复杂的3D实现或是非常简单的文本形式。下面的 CreateView方法列出了上面看到的内容。
public void CreateView(){
customView = new CustomView(this);
}
这个方法简单地调用了CustomView对象的构造方法。CustomView类的定义如下:
public class CustomView extends View{
LocateMe overlord;
public CustomView(LocateMe pCtx){
super(pCtx);
overlord = pCtx;
}
public void onDraw(Canvas cvs){
Paint p = new Paint();
String sLat = "Latitude: " + overlord.getLat();
String sLon = "Longitude: " + overlord.getLon();
cvs.drawText(sLat , 32, 32, p);
cvs.drawText(sLon, 32, 44, p);
}
}
这个定制的Android视图获得了经度和违度的测试数据,并将这些数据显示在屏幕上。这要求一个指向LocateMe的指针,Activity类是整 个应用程序的核心。它的两个方法是构造方法和onDraw方法。这个构造方法调用了超类的构造方法以及引起了Activity指针的中断。onDraw方 法将建立一个新的Paint对象(这个对象封装了颜色、透明度以及其他的主题信息),这个对象将会访问颜色主题。在本程序中,安装了用于显示的字符串,并 使用画布指针将它们画到屏幕上。这个和我们了解的J2ME游戏的画布看起来非常类似。
六、Android展望
从纯粹的开发观点看,Android是一个非常强大的SDK。它使用基于XML的布局和定制视图联合了起来。并可以使用滚动条、地图以及其他的组件。所以 的这一切都可以被重载,或由开发人员来定制。但它所提供的文档非常粗糙。在文档中并没有象SMS等技术,但是从整体上来看Android SDK,还是非常有希望的。也非常符合Google承诺的“First Look”SDK。现在我们要做的就是等待Google发布第一个基于Android的手机,并使用它。
如若满意,请点击右侧【采纳答案】,如若还有问题,请点击【追问】
希望我的回答对您有所帮助,望采纳!
~ O(∩_∩)O~
这个很难实现房间内定位,定位是靠检测不同信号反射角,房间内距离过短且墙壁反射信号,说以现在来说有很大难度!
以下部分摘抄:
大家都知道GPS,这个东西很强大,被各行各业使用。不过它也有一个很明显的缺陷,就是在室内不能定位,而且一般民用的精度也不够高(10m左右),相对于室内导航的要求(1m左右)还有一段距离。随着智能手机的普及,以及移动互联网的发展,地图与导航类软件将进入一个新的时代——室内导航。近几年来,包括谷歌、微软、苹果、博通等在内的一些科技巨头,还有一些世界有名的大学都在研究室内定位技术。
室内定位技术的商业化必将带来一波创新高潮,各种基于此技术的应用将出现在我们的面前,其影响和规模绝不会亚于GPS。我们可以想象一些比较常见的应用场景,比如在大型商场里面借助室内导航快速找到出口、电梯,家长用来跟踪小孩的位置避免小孩在超市中走丢,房屋根据你的位置打开或关闭电灯,商店根据用户的具体位置向用户推送更多关于商品的介绍等等。之前笔者看过诺基亚发布的一个视频,一位商务人士将手提包落在一个商店旁,当他走出几米远时手机就发出了提醒。室内定位还有很多场景可以被用上,让我们放开思维尽情遐想吧。
目前我们已经能够看到一些室内定位技术的应用介绍了。据我所知的有谷歌、诺基亚、博通、IndoorAtals、Qubulus、杜克大学这几个方案。下面笔者就把它们整理一下,欢迎大家在此基础上进行指正、补充。
谈谈室内定位
谷歌方案
谷歌手机地图6.0版的时候已经在一些地区加入了室内导航功能,此方案主要依靠GPS(室内一般也能搜索到2~3颗卫星)、wifi信号、手机基站以及根据一些“盲点”(室内无GPS、wifi或基站信号的地方)的具体位置完成室内的定位。目前此方案的精度还不是很满意,所以谷歌后来又发布了一个叫“Google Maps Floor Plan Marker”的手机应用,号召用户按照一定的步骤来提高室内导航的精度。
谷歌一直在努力解决两个问题:获取更多的建筑平面图;提高室内导航的精度。建筑平面图是室内导航的基础,就如同GPS车用导航需要电子导航地图一样。谷歌目前想通过“众包”的方式解决数据源的问题,就是鼓励用户上传建筑平面图。另外,用户在使用谷歌的室内导航时,谷歌会收集一些GPS、wifi、基站等信息,通过服务器进行处理分析之后为用户提供更准确的定位服务。
诺基亚方案
诺基亚采用的是HAIP技术,具体是什么笔者也没能查到更多的资料,不过诺基亚正在努力使它成为蓝牙协议的一部分,这样只要你的设备带有蓝牙模块,就能够使用这种技术进行定位。当然,仅有一个蓝牙模块还不能完成定位,还需要在室内安装一种定位发射台,通过这两者之间的通信完成定位。这种发射台可以覆盖100m×100m的范围,定位精度在30cm~100cm,据说这种发射台还有成本低、功耗低等特点,一台或多台都能完成定位。
博通方案
博通公司研制了一种用于室内定位的新芯片(BCM4752),具备三维定位功能(即你所在位置的高度也算出来)。这种芯片可以通过wifi、蓝牙或NFC等技术来提供室内定位系统支持。更强大的是,该芯片可以结合其它传感器,例如手机里的陀螺仪、加速度传感器、方位传感器等,将你位置的变化实时计算出来,甚至做到没有死角。博通公司的如意算盘是将这种芯片内置到智能手机里。
IndoorAtlas方案
IndoorAtlas是一家专注于室内导航解决方案的公司,刚成立不久。IndoorAtlas的方案基于地球磁场,依据是每一个具体位置的磁场信息都不一样。不过使用这种技术进行导航比较麻烦,首先用户需要上传建筑平面图,然后还需要你拿着移动设备绕室内一圈,记录下各个位置的地磁信号特征,这些信息需要上传到IndoorAtlas的服务器。最后,你需要使用IndoorAtlas提供的工具包开发一个应用才能使用定位功能(IndoorAtlas的开发工具包可以在线申请,不过笔者申请了两次都没结果)。
Qubulus方案
跟IndoorAtlas不同的是,Qubulus公司根据无线电信号(Radio Signature)来定位。每一个位置的无线电信号数量、频度、强度等也是不同的,Qubulus根据这些差异计算出你的具体位置。使用Qubulus的方案,你同样需要收集室内的无线电信号。Qubulus也提供了开发工具包,很容易申请下来。开发工具包里有一个例子,可以使用Eclipse直接编译通过。
杜克大学方案
杜克大学则借助现实生活中路标(landmarks)的思想,正在开发一个叫做UnLoc的应用。此应用通过感知wifi、3G信号死角,以及一些运动特征,如电梯、楼梯等,并根据这些位置已知的路标来计算你的位置。当你移动的时候,就根据其他感应器( 陀螺仪、加速度传感器、方位传感器等)来跟踪你的位置。这一过程精度会逐渐降低,但当你到达下一个路标时,位置就会被校准