我是靠谱客的博主 会撒娇天空,最近开发中收集的这篇文章主要介绍Android 学习笔记(三),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

<!-- /* Font Definitions */ @font-face {font-family:Wingdings; panose-1:5 0 0 0 0 0 0 0 0 0; mso-font-charset:2; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:0 268435456 0 0 -2147483648 0;} @font-face {font-family:宋体; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimSun; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:"/@宋体"; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; font-size:10.5pt; mso-bidi-font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:宋体; mso-font-kerning:1.0pt;} /* Page Definitions */ @page {mso-page-border-surround-header:no; mso-page-border-surround-footer:no;} @page Section1 {size:612.0pt 792.0pt; margin:72.0pt 90.0pt 72.0pt 90.0pt; mso-header-margin:36.0pt; mso-footer-margin:36.0pt; mso-paper-source:0;} div.Section1 {page:Section1;} /* List Definitions */ @list l0 {mso-list-id:1904489084; mso-list-type:hybrid; mso-list-template-ids:-372450328 67698691 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;} @list l0:level1 {mso-level-number-format:bullet; mso-level-text:; mso-level-tab-stop:21.0pt; mso-level-number-position:left; margin-left:21.0pt; text-indent:-21.0pt; font-family:Wingdings;} ol {margin-bottom:0cm;} ul {margin-bottom:0cm;} -->

在本章中,我们会解决的位置非常时髦的主题为基础的服务。对Android的主要卖点之一是它的本机访问谷歌地图的基础设施。虽然这是一项可选功 能,什么承运人将不包括这个强大的包?我猜想,在未来一年,我们将找到答案。您将深入研究这个课题,在这一章的两个主要部分。首先,你就Android的 LocationManager对象,它允许您确定您的纬度和经度,表面上,引擎盖下使用的各种系统。接下来,您将进入使谷歌地图API做您的出价。重要 的是要注意,Android的GPS和塔支持的定位系统没有得到充分执行。截至记者发稿时,有可能仿效使用默认,这是在加州各地的湾区,驱动器或通过建立 自己的数据虚假或全球定位系统GPS数据。我的例子将使用第一种方法,但我会包括代码,应最终与航运手机。你可以找到更多关于建立自定义路线和全球定位系 统插件和辍学的位置信息服务(LBSs)在文件上http://code.google.com/android/toolbox/apis/lbs.html.ByAndroid举例意味着,您将实现一个应用程序,从样品检索手机的位置GPS模块,启动一个MapActivity对象,进入屏幕上的 位置,然后使用一个覆盖提请其上一钉。

我在哪里?

在大多数情况下,基于位置的服务与Android的工作完全按照您期望他们一个小小的例外。Android允许指定的位置,查找方法用于开发。这允许您自定义的功耗,成本和准确性基于特定的使用,您想到您的应用程序。

构建LocationManager对象

第一个任务将是得到处理程序LocationManager对象,对象的高级用来寻找手机的位置。在 LocationManager可以使用任何LocationProvider对象的数量做全球定位系统(或塔式的)查找。以下是有关类变量声明和随后的 buildGPS的方法是为以后的首要位置检索泵:

Point m_curLocation;

LocationProvider m_locationProvider;

LocationManager m_locationMgr;

private void buildGPS()

{

List<LocationProvider> providorList = null;

Criteria c = new Criteria();

c.setAccuracy(50);

c.setAltitudeRequired(false);

c.setCostAllowed(false);

c.setSpeedRequired(false);

//Following line is commented out because it drops

//android into an infinite loop.

//c.setPowerRequirement(c.POWER_LOW);

m_locationMgr =

(LocationManager)

getSystemService(LOCATION_SERVICE);

m_locationProvider = m_locationMgr.getBestProvider(c);

if(m_locationProvider != null)

return;

providorList = m_locationMgr.getProviders();

if(providorList.size() > 0)

m_locationProvider = providorList.get(0);

}

您会注意到 不能简单地实例化一个新 LocationManager 对象。必须通过 getSystemService 检索方法 活动的类的公共成员。

一个必备标准

一旦你声明了相关的变量,你将建立一个无用(至少到Android到达)标准的设备上的对象。该标准允许你指定的查找方法要use.In这个例子功能,因 为你要跟踪在城市环境中的用户不断,你想要的东西低成本,低功耗和准确。您不需要速度或高度,因为你只是将成为推动这一信息谷歌地图屏幕。您可以指定通过 调用对象的标准,最终纳入LocationManager object.With这些准则,通过了所有这些变量,您可以要求最好的供应商,满足您的需求。同样,因为Android仿真器只支持一个例子全球定位系统存根, 你会得到一个空对象返回从getBestProvider电话。后来,真正的硬件,这些标准将会更有效,甚至是必不可少的。由于位置服务的标准被拒绝,您 将只获取的供应商名单的第一个元素,这将被命名为,至少在这个Android软件,gps.Note,也版本,低功耗的要求是注释掉。在时间的出版物,包括此设置 导致Android的螺旋进入无限循环的一些实物。Android工程师,抬起头来!

查表,波,卫星正在看...

现在我已经奠定了你的位置服务的基础,您可以继续查找自身。该应用程序将要求其坐标每隔5秒,并载有 MapActivity移动到正确的位置(这是我去拿详细到后来在一章)。代码清单4 - 1显示的代码开始运作。它不会编译,直到您的代码包含在一个块来后,这一个,因为你必须定义LocationUpdater对象。

Code Listing 4-1. Registering for Location Updates

boolean running = true;

private void startLocationThread()

{

try

{

LocationUpdater l = new LocationUpdater();

registerReceiver(l,

new IntentFilter("GPS_UPDATE"));

m_locationMgr.requestUpdates(

m_locationProvider, 5000,

50, new Intent("GPS_UPDATE")

} catch (Exception e){}

}

要下载的位置在5秒的间隔,你会要求经理的位置更新。首先,你必须注册为GPS_UPDATE新LocationUpdater意图。这是将要发射每次LocationManager已为您更新意图。

提示:这是一个好主意,要求在onResume活动的方法更新,并停止时onPause称为更新。这样可以从您的应用程序消耗资源,而您的应用程序不可见的应用程序的最顶层。

您可以指定供应商(在模拟器这将是全球定位系统,但在手机这将是最近的位置,供应商对您的规格),并指定为5000和最大距离变化的时间间隔为50米。请记住,这些条件都需要为一PS_UPDATE意图会见了被解雇。

当然,此代码工作,你必须定义什么是LocationUpdater的。您在定义,例如活动,以便它可以访问活动的私有成员,见代码清单4-2。

Code Listing 4-2. Defining the Intent Receiver

class LocationUpdater extends IntentReceiver

{

public void onReceiveIntent(

Context context, Intent intent)

{

Location here;

if (m_locationProvider == null)

here =

m_locationMgr.

getCurrentLocation("gps");

else

here =

m_locationMgr.

getCurrentLocation(

m_locationProvider.getName());

setMapLocationCenter(

here.getLatitude(),

here.getLongitude());

}

};

在前面的代码中 onReceiveIntent 函数被调用时 LocationManager 发出了一个 GPS_UPDATE 意图。当你通知的5秒的间 隔(或500米的位置变化),您将获得一个新的位置,并呼吁setMapLocationCenter,更新了谷歌地图对象手机的位置。

所以,你现在的纬度和在每5秒钟未来手机经度。您有位置,所以让我们写一些代码来显示在地图上的资料。

注 意:不要忘记添加正确的权限时,您的清单文件的请求定位服务的数据。您要添加 ACCESS_LOCATION ACCESS_GPSACCESS_CELL_ID ACCESS_ASSISTED_GPS 。在顶层一将让您使用位 置一般服务。其他权限都将让你进入一个特殊的位置跟踪方法。一定要包括ACCESS_LOCATION和至少一个在你的清单,或其他类型的 LocationProvider回来总是为NULL。

谷歌地图

这是不可能写不解决这个subject.Developers关于Android的书在世界各地的可能性垂涎三尺了全球定位系统提供的功能的手机和谷歌地图的本地实现。事实上,你可能已经翻本章和阅读它首先应该说什么,我们都相当高兴的东西。

一个地图对象吨

你有几个球员来处理时,谷歌地图显示一个屏幕。它有一个良好的快速介绍给所有的主要参与者。您需要协调的复杂微妙的芭蕾他们都在为了使地图屏幕行为本身。

   MapActivity是谷歌地图家族大poobah。 MapActivity到所有低级别的线程管理,网络服务和基本姿态/键处理。

MapView观点认为,支持和显示的地图。这必须包含1 MapActivity。

MapController用于将在屏幕地图上的对象。

OverlayController是superobject管理所有个人的覆盖图形。

覆盖是一个单一的drawable对象是凌驾在MapView画。

点是一个单一的纬度,经度位置。这是你的对象将用于跟踪手机的地方。

每个列出的对象(是的,有很多他们,没有,也不会有后来的笔试)在绘制了地图,显示用户的位置了重要作用。显然,您需要先从MapActivity,因为它的基线,包含了所有的休息。下面是声明和classwide变量列表:

public class MapExampleActivity extends MapActivity

{

MapView m_mapView;

MapController m_mapController;

Point m_curLocation;

LocationProvider m_locationProvider;

LocationManager m_locationMgr;

OverlayController m_overlayController;

boolean m_locationLoopActive = false;

其中一些变量应该从以前的位置示例代码熟悉。我在此仅列出 让你有一些事情将要发生情况。下面是OnCreate方法,将初始化映射对象吨:

public void onCreate(Bundle ice)

{

super.onCreate(ice);

m_mapView = new MapView(this);

m_mapController = m_mapView.getController();

m_overlayController =

m_mapView.createOverlayController();

m_overlayController.add(new TackOverlay(this), true);

m_mapController.zoomTo(9);

buildGPS();

setContentView(m_mapView);

}

创建MapView,你可以看到,要求的只不过是一个上下文

指针。但是,如果您尝试设置作为东西比MapActivity其他内容查看它,你会发 现在自己的土地除外。该MapController,这是您将使用移动地图,您的GPS位置,检索自MapView对象。您将创建一个与MapView OverlayController并添加您的TackOverlay对象的新实例它。

记住,在你的头,直到后来回TackOverlay线。您将返回到它在短短一分钟。最后,您设置缩放级别的东西,可以让你看到公路,并引述。您还需要设置GPS的人包括在内,在上一节中列出的变量。毕竟,你终于可以设置为activeContent查看MapView。

注意:MapActivity可以包含的不仅仅是MapView object.You可以定义并手动或通过XML其他部件,如第3章讨论。在大多数情况下,该MapActivity酷似一类的活动...除了其额外的资源和MapView对象的线程处理。

如果您运行的MapActivity目前的情况是到目前为止,您会看到谷歌地图启动和中心,您在俄克拉荷马州塔尔萨的地方。您需要把该Android工程师为什么会发生这样,我很坦白说,你为什么要启动您的地图有损失,但也许我没有花足够的时间在塔尔萨。

移动地图

让我们看一下代码,将地图移动到适当的位置。如果您记得您的位置查找循环(说快5倍!),你会记得的方法调用:

"setMapLocationCenter(

here.getLatitude(), here.getLongitude());"

由于这是在应用程序中的下一个步骤,让我们在这个简单的方法的内容看:

public void setMapLocationCenter(double lat, double lon)

{

m_curLocation = new Point((int)(lat * 1E6),

(int) (lon * 1E6));

m_mapController.animateTo(m_curLocation);

}

现在你看到杰出 com.google.android.maps.Point 对象的使用 而不是要与 android.graphics.Point 对象 这是显然很难做到困惑 因为他们的名字是如此不同。地图上的点对象允许您设置与1E6符号构造的位置(即,如果您不是映射/ GPS的爱好者,是指将来自GPS模块返回1E6的东西,以避免像你看你过的地方非洲海岸)。

现在你已经转换成一个点的GPS地图的输出,您 可以将屏幕上的地图,围绕它。你通过在地图上完成控制器通过调用animateTo.The本节的最后一步,这是启动循环的位置当用户按下中心的关键。现 在,你应该在这个比例之类的事情,事实上,我敢打赌你那么好,我不连解释下面的代码:

public boolean onKeyDown(int KeyCode, KeyEvent evt)

{

super.onKeyDown(KeyCode, evt);

switch(KeyCode)

{

case KeyEvent.KEYCODE_DPAD_CENTER:

if(!m_locationLoopActive)

{

m_locationLoopActive = true;

startLocationThread();

}

return true;

break;

}

return false;

}

以股票

如果你跟着到目前为止,您应该看到,当您按中心键,该地图移动到在不久的旧金山湾区的位置。此外,随着时间的推移,该地图将在平行移动与虚构的手机运动。恭喜,如果你的申请是在一个真正的手机上运行,你会低头在您的头顶...比喻。

如果你欺骗和下载的示例代码,5个创意,但缺乏创意点20分起飞。你会发现作弊蓝色钉绘制在手机的当前位置(在屏幕的中心,如果你还没有提出鼠标 点击地图,)。这蓝色俗气,blobby的事情,从一个到我那可怜的Photoshop技能的证明外,就是对谷歌地图example.Half的显示一个 有趣的地图标记的最后一部分是它的东西。这个例子,因为这本书被称为Android要点,而不是我给你写你的移动应用,行?,将是简单明了。您将利用当前用户的立 场一钉覆盖。这是一种鸟,它是一个平面...不,这是坏Photoshoping正确渲染一个覆盖有点复杂得多,你可能认为在第一。它需要两个主要组成部 分OverlayController对象和扩大覆盖对象。控制器管理的覆盖每个重叠,并确保其绘制函数被调用后MapView重画本身。如果你还记得, 我会在这里插入,因为你robably不想,你必须建立一个在OnCreate方法覆盖控制器。这里的行:

m_overlayController =

m_mapView.createOverlayController();

每个drawable覆盖必须添加到OverlayController.Again,这里您使用的线在先前的例子:

m_overlayController.add(new TackOverlay(this), true);

该TackOverlay是对覆盖对象扩展。任何时候,你想你们自己的“转,”你必须扩大覆盖对象。诚然,一个有效率的小创意方案可以借鉴的自定义所有的 覆盖层覆盖。对于这个例子的目的,就可以延长的覆盖对象,并添加所需的绘制方法。抽签方法将被调用后,地图重新绘制本身。下面是TackOverlay声 明,类变量和构造,你会在它内联MapActivity宣布所以它访问您MapActivity的变量和函数:

classTackOverlay extends Overlay

{

MapExampleActivity ctx;

Bitmap tack;

TackOverlay(MapExampleActivity c)

{

super();

BitmapDrawable b = (BitmapDrawable)

c.getResources().

getDrawable(R.drawable.tack);

tack = b.getBitmap();

}

正如你所看到的,TackOverlay看起来几乎任何其他Android对象扩展。使用上下文指针,你会抛开藏匿处钉位图资源,因此您不必加载它每次绘图。该代码获取更有趣,当你进入抽签的方法破解。

public void draw(Canvas canvas, PixelCalculator calculator,

boolean shadow)

{

super.draw(canvas, calculator, shadow);

intxy[] = newint[2];

try{

//Convert the center point to an XY coordinate.

//We could hard-code this,

//but where's the fun in that?

if(m_curLocation == null)

return;

calculator.getPointXY(m_curLocation, xy);

inttackX = xy[0] - (tack.getWidth()/2);

inttackY = xy[1] - (tack.getHeight());

canvas.drawBitmap(tack ,tackX, tackY, new Paint());

}

catch (Exception e)

{

Log.e("Crap!");

}

}

没有什么思想,在前面的代码弯曲。唯一棘手的要记住的是,您需要翻译纬度/经度

座标m_curLocation Point对象存储到一个XY坐标吸引在屏幕上。要做到这一点,覆盖对象传递一个抽奖方法PixelCalculator对象。这个对象是负责给你一个 XY坐标,为纬度/经度位置的地图。由于TackOverlay对象是指在MapExampleActivity联,它已进入m_curLocation 点变量。您将转换成一个XY位置点。由于钉,blobthingy的点底部和图像的中间,你就必须将它由钉资源的高度和遗留下来的一半 width.This要把在同线钉点札计算的位置。

另外值得一提的,尽管我还没有实现它,是布尔的阴影存在。这将告诉您是否应该制订你的覆盖了一层阴影。忽略与否,就看你。至此,你已经完成了 榜样。现在,您可以借鉴在手机的GPS定位地图有点畸形的方针。当然,你画一个伪造存根GPS定位,但您的新前沿LBS应用已经从某个地方开始。

结束了

我在本章的目的不是为了提供一个汤对坚果的所有在谷歌地图提供的Android解释。我的希望是提供一个框架,让您探索所有那些在自己的事情你。我完成了 如何使手机的从LocationManager位置,以及如何采取这些价值观念,并转换成谷歌地图location.Then他们,我讨论了如何启动一个 MapActivity和画地图屏幕上。最后,您学习了如何制作动画在全国的地图,以及如何绘制一个覆盖,或钉对象。

这应该可以让您了解您可能希望下次坚实的基础。我建议探索搜索功能,绘图多个覆盖,并安装在一个框架谷歌地图视图(可能的解释,图形,或控制指标)。

最后

以上就是会撒娇天空为你收集整理的Android 学习笔记(三)的全部内容,希望文章能够帮你解决Android 学习笔记(三)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部