androidgps
⑴ 如何利用Android编程实现GPS定位
您好,很高兴为您解答。
一、准备工作
需要如下三种软件:
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的例子。
java">{
publicvoidonCreate(Bundleparams){
super.onCreate(params);
setContentView(R.layout.main);
}
publicbooleanonKeyDown(intkeyCode,KeyEventevent){
returntrue;
}
}
三 View类
View类是Android的一个超类,这个类几乎包含了所有的屏幕类型。但它们之间有一些不同。每一个view都有一个用于绘画的画布。这个画布可以用 来进行任意扩展。本文为了方便起见,只涉及到了两个主要的View类型:定义View和Android的XML内容View。在上面的代码中,使用的是 “Hello World” XML View,它是以非常自然的方式开始的。
如果我们查看一下新的Android工程,就会发现一个叫main.xml的文件。在这个文件中,通过一个简单的XML文件,描述了一个屏幕的布局。这个 简单的xml文件的内容如下:
<?xmlversion="1.0"encoding="utf-8"?>
<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/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=""
/>
</RelativeLayout>
上面的内容的功能看起来非常明显。这个特殊文件定义了一个相关的布局,这就意味着通过一个元素到另一个元素的关系或是它们父元素的关系来描述。对于视图来 说,有一些用于布局的方法,但是在本文中只关注于上述的xml文件。
RealtiveLayout中包含了一个填充整个屏幕的文本框(也就是我们的LocateMe activity)。这个LocateMe activity在默认情况下是全屏的,因此,文本框将继承这个属性,并且文本框将在屏幕的左上角显示。另外,必须为这个XML文件设置一个引用数,以便 Android可以在源代码中找到它。在默认情况下,这些引用数被保存在R.java中,代码如下:
publicfinalclassR{
publicstaticfinalclasslayout{
publicstaticfinalintmain=0x7f030001;
}
}
视图也可以被嵌套,但和J2ME不同,我们可以将定制的视图和Android团队发布的Widgets一起使用。在J2ME中,开发人员被迫选择 GameCanvas和J2ME应用程序画布。这就意味着如果我们想要一个定制的效果,就必须在GameCanvas上重新设计我们所有的widget。 Android还不仅仅是这些,视图类型也可以混合使用。Android还带了一个 widget库,这个类库包括了滚动条,文本实体,进度条以及其他很多控件。这些标准的widget可以被重载或被按着我们的习惯定制。现在让我们来进入 我们的例子。
四、Android实例
这个演示应用程序将演示了用户的当前的经度和纬度(在文本框中显示)。onCreate构造方法将和上面的例子基本相同,除了在其中加入了键盘处理,现在 让我们看一下onKeyDown的代码。
publicbooleanonKeyDown(intkeyCode,KeyEventevent){
if(keyCode!=KeyEvent.KEYCODE_DPAD_CENTER||m_bLoading)
{
returntrue;
}
m_bLoading=true;
getLocation();
returntrue;
}
下面让我们来解释一下这段代码,首先,这段代码检查了当前被按下的键,但还没有开始处理。而是在getLocation方法中处理这一切的。然后,将装载 flag标志以及调用getLocation方法,下面是getLocation方法的代码。
privatevoidgetLocation(){
Locationloc;
LocationManagerlocMan;
LocationProviderlocPro;
List<LocationProvider>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方法列出了上面看到的内容。
publicvoidCreateView(){
customView=newCustomView(this);
}
这个方法简单地调用了CustomView对象的构造方法。CustomView类的定义如下:
{
LocateMeoverlord;
publicCustomView(LocateMepCtx){
super(pCtx);
overlord=pCtx;
}
publicvoidonDraw(Canvascvs){
Paintp=newPaint();
StringsLat="Latitude:"+overlord.getLat();
StringsLon="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~
⑵ 怎样在android手机中开启GPS功能
1、解锁手机进入主界面,选择“设置”
2、进入设置界面,选择“定位服务”
3、进入定位设置界面后,将“定位服务”右侧滑块开启。
4、开启后即可打开GPS功能,在下方可以选择不同的“定位模式”
5、在主界面下拉屏幕呼出菜单栏,点击“位置信息”可以快速开启GPS功能。
⑶ Android中的GPS如何判断是否定位
我们在做手机开发的时候,往往需要获取用户当前的位置,以使用户获得更好的体验。这就需要我们在程序中写出判断用户是否打开GPS定位系统,并对用户做出提示。
判断用户是否打开GPS代码如下:
12345678910111213
public static final boolean isOPen(final Context context) { LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); // 通过GPS卫星定位,定位级别可以精确到街(通过24颗卫星定位,在室外和空旷的地方定位准确、速度快) boolean gps = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); // 通过WLAN或移动网络(3G/2G)确定的位置(也称作AGPS,辅助GPS定位。主要用于在室内或遮盖物(建筑群或茂密的深林等)密集的地方定位) boolean network = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER); if (gps || network) { return true; } return false; }
而有些时候用户并不能配合我们打开GPS系统,如果我的应用必须打开GPS(比如说一些租车、送餐类型APP需要获取用户的位置信息),就需要强制用户打开GPS定位。代码如下:
123456789101112
public static final void openGPS(Context context) { Intent GPSIntent = new Intent(); GPSIntent.setClassName("com.android.settings", "com.android.settings.widget.SettingsAppWidgetProvider"); GPSIntent.addCategory("android.intent.category.ALTERNATIVE"); GPSIntent.setData(Uri.parse("custom:3")); try { PendingIntent.getBroadcast(context, 0, GPSIntent, 0).send(); } catch (CanceledException e) { e.printStackTrace(); } }
附录:需要在Mainfast.xml中添加的权限
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
⑷ 安卓手机如何开启GPS定位服务
1、首先打开自己的手机,然后找到设置图标,点击进入。
⑸ 谷歌Android系统的GPS是怎样运行的
现在让我们理解每一样东西
GPS芯片
直接与GPS卫星通讯的射频接收机。
GPS驱动
GPS驱动系统软件,使用低阶API和GPS芯片通讯。在系统层上它可能包含一个或多个加载在/System/Lib/hw/或/Vendor/Lib/hw/目录的文件,文件名称通常前缀为GPS而后缀为So(例如,gps.default.so、gps.aries.so等等)主要取决Android版本与智能平台的差异有所不同。
GL引擎实际上这是整个系统的核心,在系统层上它由加载在/system/bin目录名类似于glgps或gpsd的文件组成(平台特定)。
GL引擎使用配置参数运行,由.xml 和.conf 文件构成(例如,glconfig.xml、gps.xml、Jupiter.xml、gpsconfig.xml、gps.conf、secgps.conf等等)。实际位置和文件的名称也取决于Android版本与平台,但是,他们大多是在/system/etc、/system/etc/gps、/vendor/etc/、/data/gps等等。取决于配置和平台,它需要源于发射塔的初始位置信息, 然后它读取NVRAM(Non-volatile memory,非易失性存储器),NVRAM信息主要在/有着.sto扩展的文件(例如,gldata.sto)与附加数据文件(如lto.dat、xtra.bin、epo.dat等等)的data/gps目录。
GL引擎使用所有的这些信息指示并协助GPS驱动,大多GL引擎都可以探测到多个GPS卫星而为了GPS驱动的规划,但对于锁定,它还需要一些额外的信息(定时、应用周期管理等),它可以从GPS卫星下载(独立模式:速度非常缓慢,比特/秒)或利用互联网来访问SUPL(Secure User Plane Location,安全用户层面定位)/NTP(Network Time Protocol,网络定时协议)服务器(基于主存储器的协助,速度快,兆位/秒)
当所有的这些都激活后,它将保存所有数据在NVRAM中,以供将来调用。
Android构架
它包括像使用GL引擎提供服务到用户应用程序的位置管理器等Android框架。
用户应用程序
位置服务应用,像Google Maps(谷歌地图)、Sygic(导航系统)、Navigon(路航)、TomTom(通腾)等等。
在心里记住以上所有的内容了吗?现在让我们看看市场中GPS Faster Fix Solutions(更快的解决方案)是如何做的。
更快的解决方案,像GPS状态、GPS工具组、GPS测试、GPS侦测等等,主要为处理两件事:
下载XTRA数据(lto.dat、xtra.bin、epo.dat、gldata.sto等)
修改GPS.conf(更改这个系统级的配置文件,你当然要取得你的Android设备的Root权限)
尽管如此,它并不完全是这样的。
设备使用谷歌作为安全用户层面定位服务器,但大多数设备由于无效或过期的证书无法使用它。在这样的情况中,即当谷歌服务器拒绝协助请求时,用户应该使用SUPL.NOKIA.COM:7275,这虽然缓慢,但比什么都没有更好。
如果GL引擎或GPS驱动有问题,则可能需要重新写入它,但首先得确保物理硬件GPS芯片没有问题。
对于其他的配置参数,用户们常可以修改xml配置文件,比如,至少你可以获得调试日志来了解错误的发展方向,你可以使用下面的参数
cLogEnabled="true" acLogDirectory="/sdcard/gps" and LogPriMask, LogFacMask and also DEBUG_LEVEL(gps.conf)
当然,无论怎样,你首先得备份原始的文件。
希望每位用户使用这个指南后都能轻松地提高他们的GPS性能。
⑹ android怎样自动打开gps
1.第一种方法
private void toggleGPS() {
Intent gpsIntent = new Intent();
gpsIntent.setClassName("com.android.settings", "com.android.settings.widget.SettingsAppWidgetProvider");
gpsIntent.addCategory("android.intent.category.ALTERNATIVE");
gpsIntent.setData(Uri.parse("custom:3"));
try {
PendingIntent.getBroadcast(StartActivity.this, 0, gpsIntent, 0).send();
} catch (CanceledException e) {
e.printStackTrace();
}
}
2.第二种方法
private void openGPSSettings() {
//获取GPS现在的状态(打开或是关闭状态)
boolean gpsEnabled = Settings.Secure.isLocationProviderEnabled( getContentResolver(), LocationManager.GPS_PROVIDER );
if(gpsEnabled)
{
//关闭GPS
Settings.Secure.setLocationProviderEnabled( getContentResolver(), LocationManager.GPS_PROVIDER, false );
}
else
{
//打开GPS www.2cto.com
Settings.Secure.setLocationProviderEnabled( getContentResolver(), LocationManager.GPS_PROVIDER, true);
}
3.第三种方法(手动设置)
LocationManager alm = (LocationManager)StartActivity.this.getSystemService(Context.LOCATION_SERVICE);
if (alm.isProviderEnabled(android.location.LocationManager.GPS_PROVIDER))
{
Toast.makeText(this, "GPS模块正常", Toast.LENGTH_SHORT).show();
}
Toast.makeText(this, "请开启GPS!", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(Settings.ACTION_SECURITY_SETTINGS);
startActivityForResult(intent,0); //此为设置完成后返回到获取界面