Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 650|回复: 0

[实例教程]注册Android地图API密钥

[复制链接]

该用户从未签到

发表于 2011-10-22 13:07:56 | 显示全部楼层 |阅读模式
权限和Maps库设置
    在manifest.xml中设置全相应的权限,比如:

java代码: <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

<uses-permission android:name="android.permission.INTERNET" />
在manifest.xml中加上要用的maps库:

java代码: <manifest xmlns:android="http://schemas.android.com/apk/res/android"



package="eoe.demo">

<application android:name="MyApplication" >



<uses-library android:name="com.Google.android.maps" />

</application>

</manifest>
Maps库分析

       (1)MapController
        控制地图移动,伸缩,以某个GPS坐标为中心,控制MapView中的view组件,管理Overlay,提供View的基本功能。使用多种地图模式(地图模式(某些城市可实时对交通状况进行更新),卫星模式,街景模式)来查看Google Map。

       常用方法:animateTo(GeoPoint point)  setCenter(GeoPoint point)  setZoom(int zoomLevel) 等。

      (2)MapView
        Mapview是用来显示地图的view, 它派生自android.view.ViewGroup。当MapView获得焦点,可以控制地图的移动和缩放。

       地图可以以不同的形式来显示出来,如街景模式,卫星模式等,通过setSatellite(boolean)  setTraffic(boolean), setStreetView(boolean) 方法。

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

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

       常用方法:getController()  getOverlays()  setSatellite(boolean)  setTraffic(boolean),   setStreetView(boolean)  setBuiltInZoomControls(boolean)等。

      (3)MapActivity

        管理Activity的生命周期,为mapview建立及取消对map service的连接。

        MapActivity是一个抽象类,任何想要显示MapView的activity都需要派生自MapActivity。并且在其派生类的onCreate()中,都要创建一个MapView实例,可以通过MapViewconstructor (然后添加到View中ViewGroup.addView(View)) 或者通过layout XML来创建。

      (4)Overlay

        Overlay是覆盖到MapView的最上层,可以扩展其ondraw接口,自定义在MapView中显示一些自己的东西。MapView通过MapView.getOverlays()对Overlay进行管理。

        除了Overlay这个基类,Google还扩展了2个比较有用的Overlay

        1)MylocationOverlay—集成了Android.location中接收当前坐标的接口,集成SersorManager中CompassSensor的接口
         我们只需要enableMyLocation(),enableCompass就可以让我们的程序拥有实时的MyLocation以及Compass 功能(Activity.onResume()中)。
         2)ItemlizedOverlay—管理一个OverlayItem链表,用图片等资源在地图上作风格相同的标记。
(5)Projection:MapView中GPS坐标与设备坐标的转换(GeoPoint和Point)。

       一个简单的小例子

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

       Step1: 新建一个android project, 注意这里要选择的buildtarget为"GoogleAPIs"
       Step 2: 修改menifest文件:

java代码: <?xmlversion="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

java代码: <?xmlversion="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.


java代码: package eoe.demo;



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.view.KeyEvent;

import android.view.Menu;

import android.view.MenuItem;



public class MainActivity extends MapActivity {



// 地图显示控制相关变量定义

private MapView map=null;

private MapController mapCon;



// 菜单项

final private int menuMode=Menu.FIRST;

final private int menuExit=Menu.FIRST+1;

private int chooseItem=0;



/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);



// 获取MapView

map=(MapView)findViewById(R.id.map);

// 设置显示模式

map.setTraffic(true);

map.setSatellite(false);

map.setStreetView(true);

// 设置可以缩放

map.setBuiltInZoomControls(true);



// 设置初始地图的中心位置

GeoPoint geoBeijing=new GeoPoint((int)(39.95*1000000), (int)(116.37*1000000));

mapCon=map.getController();

mapCon.setCenter(geoBeijing);

}



@Override

public boolean onCreateOptionsMenu(Menu menu) {

// 建立菜单

menu.add(0,menuMode,0,"地图模式");

menu.add(0, menuExit, 1, "退出");

return super.onCreateOptionsMenu(menu);

}



@Override

public boolean onKeyDown(int keyCode, KeyEvent event) {

return super.onKeyDown(keyCode, event);

}



@Override

public boolean onMenuItemSelected(int featureId, MenuItem item) {

switch (item.getItemId()) {

case menuExit:

finish();

break;

case menuMode:

Dialog dMode=new AlertDialog.Builder(this)

.setTitle("地图模式设置")

.setSingleChoiceItems(R.array.MapMode, chooseItem, new DialogInterface.OnClickListener()

{



@Override

public void onClick(DialogInterface dialog, int which) {

chooseItem=which;

}

})

.setPositiveButton("确定", new DialogInterface.OnClickListener()

{



@Override

public void onClick(DialogInterface dialog, int which) {

switch (which) {

case 0:

map.setSatellite(true);

//map.setTraffic(false);

//map.setStreetView(false);

break;

case 1:

//map.setSatellite(false);

map.setTraffic(true);

//map.setStreetView(false);

break;

case 2:

//map.setSatellite(false);

//map.setTraffic(false);

map.setStreetView(true);

break;

default:

break;

}

}

})

.setNegativeButton("取消", new DialogInterface.OnClickListener() {



@Override

public void onClick(DialogInterface dialog, int which) {



}

})

.create();

dMode.show();

break;

default:

break;

}

return super.onMenuItemSelected(featureId, item);

}



@Override

protected boolean isRouteDisplayed() {

return false;

}

}
回复

使用道具 举报

该用户从未签到

发表于 2011-10-22 13:08:01 | 显示全部楼层
让我得些几分豆丁吧 啥都干部了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2025-1-22 17:41 , Processed in 0.384089 second(s), 47 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表