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 地图中的公路会根据实时路况数据,以绿色、黄色或红色显示。
收藏夹:为你常去的地方加上书签,以便能在地图上非常方便地返回到这些地方。
1. 首先先要获取你的debug keystore位置:
打开Eclipse--->Windows---> preferences--->Android--->Build
查看默认的debug keystore位置,我的是C:\Documents and Settings\sdhbk\.android\debug.keystore
2.
D:\android-sdk-windows-1.5_r1\tools>keytool -list -alias androiddebugkey -keystore "C:\Documents and Settings\sdhbk\.android\debug.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
- <com.google.android.maps.MapView
- android:id="@+id/mapview"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:apiKey="0jOkQ80oD1JL9C6HAja99uGXCRiS2CGjKO_bc_g" />
或者
- <view android:id="@+id/mv"
- class="com.google.android.maps.MapView"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:layout_weight="1"
- android:apiKey="0jOkQ80oD1JL9C6HAja99uGXCRiS2CGjKO_bc_g"
- />
5.Android在sdk1.5的预装的add-on中提供了一个Map扩展库com.google.android.maps,利用它你就可以 给你的android应用程序增加上强大的地图功能了。这个库的位置在Your-SDK_DIR\add-ons\google_apis-3 \libs.
一定要在manifest.xml中设置全相应的权限,比如:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
要在manifest.xml中加上要用的maps库:
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.example.package.name">
- ...
- <application android:name="MyApplication" >
- <uses-library android:name="com.google.android.maps" />
- ...
- </application>
- ...
- </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 version="1.0" encoding="utf-8"?>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.map.prac"
- android:versionCode="1"
- android:versionName="1.0">
- <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
- <uses-permission android:name="android.permission.INTERNET" />
- <application android:icon="@drawable/icon" android:label="@string/app_name">
- <uses-library android:name="com.google.android.maps" />
- <activity android:name=".MapViewPrac2"
- android:label="@string/app_name">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- </application>
- <uses-sdk android:minSdkVersion="3" />
- </manifest>
Step 3: 修改layout文件,main.xml
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/main"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent">
- <com.google.android.maps.MapView
- android:id="@+id/map"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:enabled="true"
- android:clickable="true"
- android:apiKey="???????????????????????????????????"
- />
- </LinearLayout>
这里需要将api key中的????????????改成你自己申请到的api key。
Step 4: 修改代码:
- package com.map.prac;
- import com.google.android.maps.GeoPoint;
- import com.google.android.maps.MapActivity;
- import com.google.android.maps.MapController;
- import com.google.android.maps.MapView;
- import android.app.AlertDialog;
- import android.app.Dialog;
- import android.content.DialogInterface;
- import android.os.Bundle;
- import android.util.Log;
- import android.view.KeyEvent;
- import android.view.Menu;
- import android.view.MenuItem;
- public class MapViewPrac2 extends MapActivity {
- private final String TAG = "MapPrac";
- private MapView mapView = null;
- private MapController mc;
- //Menu items
- final private int menuMode = Menu.FIRST;
- final private int menuExit = Menu.FIRST+1;
- final private int menuCommandList = Menu.FIRST + 2;
- private int chooseItem = 0;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- mapView = (MapView)findViewById(R.id.map);
- mc = mapView.getController();
- mapView.setTraffic(true); //
- mapView.setSatellite(false);
- mapView.setStreetView(true);
- //GeoPoint gp = new GeoPoint((int)(39.269259 * 1000000), (int)(115.255762 * 1000000));//yixian
- GeoPoint gp = new GeoPoint((int)(39.95 * 1000000), (int)(116.37 * 1000000));//beijing
- //mc.animateTo(gp);
- //mc.setZoom(12);
- mc.setCenter(gp);
- //to display zoom control in MapView
- mapView.setBuiltInZoomControls(true);
- }
- @Override
- public boolean onKeyDown(int keyCode, KeyEvent event) {
- // TODO Auto-generated method stub
- Log.i(TAG,"enter onKeyDown");
- return super.onKeyDown(keyCode, event);
- }
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- menu.add(0, menuMode, 0, "Map Mode");
- menu.add(0, menuCommandList, 1, "Command List");
- menu.add(0, menuExit, 2, "Exit");
- return super.onCreateOptionsMenu(menu);
- }
- @Override
- public boolean onMenuItemSelected(int featureId, MenuItem item) {
- // TODO Auto-generated method stub
- switch(item.getItemId())
- {
- case menuMode:
- Dialog dMode = new AlertDialog.Builder(this)
- //.setIcon(R.drawable.alert_dialog_icon)
- .setTitle(R.string.alert_dialog_single_choice)
- .setSingleChoiceItems(R.array.select_dialog_items2, chooseItem, new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int whichButton) {
- Log.i(TAG, "choose button is "+ whichButton);
- chooseItem = whichButton;
- }
- })
- .setPositiveButton(R.string.alert_dialog_ok, new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int whichButton) {
- Log.i(TAG,"item = "+chooseItem);
- switch(chooseItem)
- {
- case 0:
- mapView.setSatellite(false);
- break;
- case 1:
- mapView.setSatellite(true);
- break;
- case 2:
- mapView.setTraffic(true);
- break;
- case 3:
- mapView.setStreetView(true);
- break;
- default:
- break;
- }
- }
- })
- .setNegativeButton(R.string.alert_dialog_cancel, new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int whichButton) {
- }
- })
- .create();
- dMode.show();
- break;
- case menuCommandList:
- //create the dialog
- Dialog d = new AlertDialog.Builder(this)
- .setTitle(R.string.select_dialog)
- .setItems(R.array.select_dialog_items, new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- String[] items = getResources().getStringArray(R.array.select_dialog_items);
- Log.i(TAG,"you choose is: " + items[which]);
- }
- })
- .create();
- //show the dialog
- d.show();
- break;
- case menuExit:
- finish();
- break;
- default:
- break;
- }
- return super.onMenuItemSelected(featureId, item);
- }
- @Override
- protected boolean isRouteDisplayed() {
- // TODO Auto-generated method stub
- return false;
- }
- }
关于google map的用法还有待各位Android开发人员在实际开发中的总结!
Android系统Google Maps开发实例浅析相关推荐
- android打印doc文件,安卓系统APP打印开发实例.doc
S&PS Solution Tips PAGE 5 | Page 主题 安卓系统APP打印开发实例 适用范围 带网口Honeywell系列 intermec系列 解决方案 当你想要在安卓DPA ...
- 操作系统:Android(Google公司开发的操作系统)
ylbtech-操作系统:Android(Google公司开发的操作系统) Android是一种基于Linux的自由及开放源代码的操作系统.主要使用于移动设备,如智能手机和平板电脑,由Google(谷 ...
- Android系统的应用开发与运行环境构建
当我们选择基于Android系统的移动应用开发,如何构架其应用开发与运行环境呢?本文围绕这问题展开了细致的讲解.首先让我们一起想想如下问题. P1:构建环境准备工作是什么? P2:软件安装的顺序是什么 ...
- Android实现注册登录头像上传等功能常规开发(Android端,服务器端开发实例)
Android实现注册登录头像上传等功能常规开发(Android端,服务器端开发实例) 标签: 注册登录Android开发servlet 2017-04-18 20:34 454人阅读 评论(1) ...
- android 蓝牙锁应用开发实例(三)蓝牙相关功能实现【第一部分】
本人水平有限,文章中如果出现什么不正确或者模糊的地方,还请各位小伙伴留下评论,多多指教 : ) 正式开始前的话 蓝牙开发梳理 整体思路 核心API BlueToothAdapter 简介 getDef ...
- android(Google公司开发的操作系统)
Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发.尚未有统一中文名称,中国大陆地区较多人使用&quo ...
- Android 系统应用Setting开发总结
版本:2.0 日期:2014.3.18 版权:© 2013,2014 kince 转载注明出处 更新: 2014.3.20:1.修正导入jar包问题 2. 更新运行不了解决办法 最近由于工作关系需要对 ...
- Android的Google地图开发
编写这个程序之前需要有一个Google 地图 扩展库在SDK中,一般来说,android 1.5中就已经有了.如果没有的话可以在这里下载: http://code.google.com/android ...
- Android版Google Maps入门:高级
1.简介 尽管Google Maps的标准功能非常有用,但有时您还需要做更多的事情. 幸运的是,Google创建了一个开放源代码库,其中包含一组实用程序,Android开发人员可以使用这些实用程序通过 ...
最新文章
- centos6.4安装apache php mysql_CentOS6.4下apache+php的简易搭建
- 地图检索 – 与众不同
- 5 可隐藏的侧栏_6种隐藏式设计,不仅实用,而且更显高级!
- boost::sort模块实现测试并行稳定排序
- 解决spring配置c3p0连接池,tomcat无法正常启动
- WF(9):本地服务之事件处理
- 【Codeforces Round #446 (Div. 2) C】Pride
- leetcode 罗马数字转整数
- 辗转相除法(欧几里得算法)求解最大公约数、最小公倍数
- Markdown中插入图片及图注
- Rust 要“进驻” Linux 内核了?Linux 之父:保持观望
- 每天一个Linux命令(6):rmdir命令
- 二、八大基本类型,由来和详解(超全)/读完这个面试再也不怕问到蒙
- 升级LINUX内核(支持8G内存)的命令
- HIMSS博览会首登中国 建言医卫IT新发展
- 笔记本电脑WIFI图标消失解决方案大全,无WIFI图标也能自由连WIFI上网。
- 【UIAutomator2】实现微信自动加好友功能
- android禁止输入框自动弹出软键盘,怎么禁用输入法-Android禁止EditText输入框自动弹出软键盘的4种方法...
- Python爬虫抓取考试试题
- 根据已经commit的数据,进行leader和peon之间的同步
热门文章
- zabbix mysql 8g优化_Zabbix分区优化
- linux配置中心自动化,centos下搭建git服务 基于git服务配置自动化部署 遇到的Linux知识补充...
- Verilog初级教程(1)认识 Verilog HDL
- 傅里叶分析中的时频域之间的关系(以及一点对于DFT的一点思考)
- __CLASS__ get_class() get_called_class()区别
- 乌兰浩特市大数据平台助力就业脱贫
- day1 作业二:多级菜单操作
- 查看Entity Framework生成的SQL语句
- OSI 七层参考模型
- 想成为优秀的技术人员你必须做到的几件事情