• Android系统Google Maps开发实例浅析


         Google Map(谷歌地图)是Google公司提供的电子地图服务。包括了三种视图:矢量地图、卫星图片、地形地图。对于Android系统来说,可以利用Google提供的地图服务来开发自己的一些应用。Google Map的服务体现在两个方面:地图API和位置API。使用Android Maps API(地图API)和Android Location API(定位API)可以轻松实现实用而且强大的功能。

           我的位置:“我的位置”在地图上显示你的当前位置(通常在 1000 米范围之内)。即使没有 GPS,你也可以确定自己的位置。谷歌手机地图还支持内置 GPS,也可以链接到蓝牙GPS 传感器,以便更准确地确定用户的位置。“我的位置”功能是通过识别你附近无线发射塔的信息广播而确定你的位置的。

           地图和卫星视图:谷歌手机地图向你提供所查看地区的地图和卫星视图,其界面的使用感觉与你在台式机上相同。 可沿其中一个方向滚动,以查看地图上的更多内容;或使用快捷键进行缩放。

           商户列表:借助于Google 的本地搜索引擎,可以按名称(如“星巴克”)或类型(如“咖啡”)搜索商家,查看商店的营业时间和评分,然后,只需点击一下即可拨通感兴趣的商家的电话。有了“我的位置”功能,甚至都不需要输入当前位置即可方便地找到附近的商家。

           驾车路线:可以很方便地获得驾车路线,其中会清楚地标明每次转弯。有了“我的位置”功能,甚至都不需要输入出发点。

           公交换乘:查看公交和地铁线路,确定转车路线,制定你在全球 80 多个城市的出行计划。“公交换乘”功能目前适用于黑莓、Windows Mobile、S60 和其他支持 Java 的手机。

           路况信息:Google 地图中的公路会根据实时路况数据,以绿色、黄色或红色显示。

           收藏夹:为你常去的地方加上书签,以便能在地图上非常方便地返回到这些地方。

     Android系统Google Maps开发实例浅析

           1. 首先先要获取你的debug keystore位置:

           打开Eclipse--->Windows---> preferences--->Android--->Build

           查看默认的debug keystore位置,我的是C:Documents and Settingssdhbk.androiddebug.keystore

           2.

           D:android-sdk-windows-1.5_r1 ools>keytool -list -alias androiddebugkey -keystore "C:Documents and Settingssdhbk.androiddebug.keystore" -storepass android -keypass android 

           androiddebugkey, 2009-7-25, PrivateKeyEntry,

           认证指纹 (MD5): DA:D5:6E:C2:80:D1:0F:0D:F8:2A:58:6A:74:7C:CE:2D

           3.

           打开http://code.google.com/intl/zh-CN/android/maps-api-signup.html,填入你的认证指纹(MD5)即可获得apiKey了,结果显示如下:

           感谢您注册 Android 地图 API 密钥!
           您的密钥是:
           XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

           4. 使用得到的apiKey:

           在layout中加入MapView

    XML/HTML代码
    1. <com.google.android.maps.MapView  
    2. android:id="@+id/mapview"  
    3. android:layout_width="fill_parent"  
    4. android:layout_height="fill_parent"  
    5. android:apiKey="0jOkQ80oD1JL9C6HAja99uGXCRiS2CGjKO_bc_g" />  

           或者

    XML/HTML代码
    1. <view android:id="@+id/mv"  
    2. class="com.google.android.maps.MapView"  
    3. android:layout_width="fill_parent"  
    4. android:layout_height="fill_parent"  
    5. android:layout_weight="1"  
    6. android:apiKey="0jOkQ80oD1JL9C6HAja99uGXCRiS2CGjKO_bc_g"  
    7. />  

           5.Android在sdk1.5的预装的add-on中提供了一个Map扩展库com.google.android.maps,利用它你就可以 给你的android应用程序增加上强大的地图功能了。这个库的位置在Your-SDK_DIRadd-onsgoogle_apis-3 libs.

           一定要在manifest.xml中设置全相应的权限,比如:

           <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
           <uses-permission android:name="android.permission.INTERNET" />

           要在manifest.xml中加上要用的maps库:

    XML/HTML代码
    1. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
    2. package="com.example.package.name">  
    3. ...   
    4. <application android:name="MyApplication" >  
    5. <uses-library android:name="com.google.android.maps" />  
    6. ...   
    7. </application>  
    8. ...   
    9. </manifest>  

           需要说明的是这个库不是标准的android sdk的内容,你也可以自己从这里这里下载并放到你的sdk里面。

           Maps库分析

           Maps库提供了十几个类,具体可以参考这里http://code.google.com/intl/ja/android/add-ons/google-apis/reference/index.html, 包括Mapview,MapController,MapActivity等。

           Mapview是用来显示地图的view, 它也是派生自android.view.ViewGroup。

           地图可以以不同的形式来显示出来,如街景模式,卫星模式等,具体方法可以参考:

           setSatellite(boolean), setTraffic(boolean), and setStreetView(boolean)

           MapView只能被MapActivity来创建,这是因为mapview需要通过后台的线程来连接网络或者文件系统,而这些线程要由mapActivity来管理。

           需要特别说明的一点是,android 1.5中,map的zoom采用了built-in机制,可以通过setBuiltInZoomControls(boolean)来设置是否在地图上显示zoom控件。

           MapActivity 是一个抽象类,任何想要显示MapView的activity都需要派生自MapActivity。并且在其派生类的onCreate()中,都要创建一 个MapView实例,可以通过MapView constructor (then add it to a layout View with ViewGroup.addView(View)) 或者通过layout XML来创建。

           Google Maps实例分析

           最后,按照惯例,还是用一个小程序来演示一下android中地图功能的开发。主要功能是实现了地图的缩放,添加了菜单,从而可以手动选择地图的显示模式等。

           Step 1: 新建一个android project, 注意这里要选择的build target为"Google APIs"。

           Step 2: 修改menifest文件:

    XML/HTML代码
    1. <?xml version="1.0" encoding="utf-8"?>  
    2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
    3. package="com.map.prac"  
    4. android:versionCode="1"  
    5. android:versionName="1.0">  
    6. <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />  
    7. <uses-permission android:name="android.permission.INTERNET" />  
    8. <application android:icon="@drawable/icon" android:label="@string/app_name">  
    9. <uses-library android:name="com.google.android.maps" />  
    10. <activity android:name=".MapViewPrac2"  
    11. android:label="@string/app_name">  
    12. <intent-filter>  
    13. <action android:name="android.intent.action.MAIN" />  
    14. <category android:name="android.intent.category.LAUNCHER" />  
    15. </intent-filter>  
    16. </activity>  
    17. </application>  
    18. <uses-sdk android:minSdkVersion="3" />  
    19. </manifest>  

           Step 3: 修改layout文件,main.xml

    XML/HTML代码
    1. <?xml version="1.0" encoding="utf-8"?>  
    2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    3. android:id="@+id/main"  
    4. android:layout_width="fill_parent"  
    5. android:layout_height="fill_parent">  
    6. <com.google.android.maps.MapView  
    7. android:id="@+id/map"  
    8. android:layout_width="fill_parent"  
    9. android:layout_height="fill_parent"  
    10. android:enabled="true"  
    11. android:clickable="true"  
    12. android:apiKey="???????????????????????????????????"  
    13. />  
    14. </LinearLayout>  

           这里需要将api key中的????????????改成你自己申请到的api key。

           Step 4: 修改代码:

    Java代码
    1. package com.map.prac;   
    2. import com.google.android.maps.GeoPoint;   
    3. import com.google.android.maps.MapActivity;   
    4. import com.google.android.maps.MapController;   
    5. import com.google.android.maps.MapView;   
    6. import android.app.AlertDialog;   
    7. import android.app.Dialog;   
    8. import android.content.DialogInterface;   
    9. import android.os.Bundle;   
    10. import android.util.Log;   
    11. import android.view.KeyEvent;   
    12. import android.view.Menu;   
    13. import android.view.MenuItem;   
    14. public class MapViewPrac2 extends MapActivity {   
    15. private final String TAG = "MapPrac";   
    16. private MapView mapView = null;   
    17. private MapController mc;   
    18. //Menu items   
    19. final private int menuMode = Menu.FIRST;   
    20. final private int menuExit = Menu.FIRST+1;   
    21. final private int menuCommandList = Menu.FIRST + 2;   
    22. private int chooseItem = 0;   
    23.   
    24. @Override  
    25. public void onCreate(Bundle savedInstanceState) {   
    26. super.onCreate(savedInstanceState);   
    27. setContentView(R.layout.main);   
    28. mapView = (MapView)findViewById(R.id.map);   
    29. mc = mapView.getController();   
    30. mapView.setTraffic(true); //   
    31. mapView.setSatellite(false);   
    32. mapView.setStreetView(true);   
    33. //GeoPoint gp = new GeoPoint((int)(39.269259 * 1000000), (int)(115.255762 * 1000000));//yixian   
    34. GeoPoint gp = new GeoPoint((int)(39.95 * 1000000), (int)(116.37 * 1000000));//beijing   
    35. //mc.animateTo(gp);   
    36. //mc.setZoom(12);   
    37. mc.setCenter(gp);   
    38. //to display zoom control in MapView   
    39. mapView.setBuiltInZoomControls(true);   
    40. }   
    41. @Override  
    42. public boolean onKeyDown(int keyCode, KeyEvent event) {   
    43. // TODO Auto-generated method stub   
    44. Log.i(TAG,"enter onKeyDown");   
    45. return super.onKeyDown(keyCode, event);   
    46. }   
    47. @Override  
    48. public boolean onCreateOptionsMenu(Menu menu) {   
    49. menu.add(0, menuMode, 0, "Map Mode");   
    50. menu.add(0, menuCommandList, 1, "Command List");   
    51. menu.add(0, menuExit, 2, "Exit");   
    52. return super.onCreateOptionsMenu(menu);   
    53. }   
    54. @Override  
    55. public boolean onMenuItemSelected(int featureId, MenuItem item) {   
    56. // TODO Auto-generated method stub   
    57. switch(item.getItemId())   
    58. {   
    59. case menuMode:   
    60. Dialog dMode = new AlertDialog.Builder(this)   
    61. //.setIcon(R.drawable.alert_dialog_icon)   
    62. .setTitle(R.string.alert_dialog_single_choice)   
    63. .setSingleChoiceItems(R.array.select_dialog_items2, chooseItem, new DialogInterface.OnClickListener() {   
    64. public void onClick(DialogInterface dialog, int whichButton) {   
    65. Log.i(TAG, "choose button is "+ whichButton);   
    66. chooseItem = whichButton;   
    67.   
    68. }   
    69. })   
    70. .setPositiveButton(R.string.alert_dialog_ok, new DialogInterface.OnClickListener() {   
    71. public void onClick(DialogInterface dialog, int whichButton) {   
    72.   
    73. Log.i(TAG,"item = "+chooseItem);   
    74. switch(chooseItem)   
    75. {   
    76. case 0:   
    77. mapView.setSatellite(false);   
    78. break;   
    79. case 1:   
    80. mapView.setSatellite(true);   
    81. break;   
    82. case 2:   
    83. mapView.setTraffic(true);   
    84. break;   
    85. case 3:   
    86. mapView.setStreetView(true);   
    87. break;   
    88. default:   
    89. break;   
    90. }   
    91. }   
    92. })   
    93. .setNegativeButton(R.string.alert_dialog_cancel, new DialogInterface.OnClickListener() {   
    94. public void onClick(DialogInterface dialog, int whichButton) {   
    95.   
    96. }   
    97. })   
    98. .create();   
    99. dMode.show();   
    100. break;   
    101. case menuCommandList:   
    102. //create the dialog   
    103. Dialog d = new AlertDialog.Builder(this)   
    104. .setTitle(R.string.select_dialog)   
    105. .setItems(R.array.select_dialog_items, new DialogInterface.OnClickListener() {   
    106. public void onClick(DialogInterface dialog, int which) {   
    107.   
    108. String[] items = getResources().getStringArray(R.array.select_dialog_items);   
    109.   
    110. Log.i(TAG,"you choose is: " + items[which]);   
    111. }   
    112. })   
    113. .create();   
    114. //show the dialog   
    115. d.show();   
    116. break;   
    117. case menuExit:   
    118. finish();   
    119. break;   
    120. default:   
    121. break;   
    122. }   
    123. return super.onMenuItemSelected(featureId, item);   
    124. }   
    125. @Override  
    126. protected boolean isRouteDisplayed() {   
    127. // TODO Auto-generated method stub   
    128. return false;   
    129. }   
    130. }  

           关于google map的用法还有待各位Android开发人员在实际开发中的总结!

  • 相关阅读:
    便 加权并查集
    bzoj 4565 状压区间dp
    bzoj 2242 [SDOI2011]计算器 快速幂+扩展欧几里得+BSGS
    poj 3243 扩展BSGS
    bzoj 3239 poj 2417 BSGS
    51nod 1135 原根 就是原根...
    bzoj 2005 能量采集 莫比乌斯反演
    约会 倍增lca
    bzoj 2186 [Sdoi2008]沙拉公主的困惑 欧拉函数
    IE下textarea去除回车换行符
  • 原文地址:https://www.cnblogs.com/xiaochao1234/p/3848434.html
Copyright © 2020-2023  润新知