注册 Android 地图 API 密钥

 

运行:keytool -list -keystore ~/.android/debug.keystore

用得到的MD5码到http://code.google.com/intl/zh-CN/android/maps-api-signup.html注册API密钥。参考

http://www.cnblogs.com/feisky/archive/2010/01/17/1650083.html

 

注册完成后会得到如下的网页:

您的密钥是:

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

此密钥适用于所有使用以下指纹所对应证书进行验证的应用程序:

XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX

下面是一个 xml 格式的示例,帮助您了解地图功能:

 <com.google.android.maps.MapView
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"                
  android:apiKey="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
  />

 

模拟器设置

 

建立一个"Google Inc.:Google APIs:3"的模拟器。

 

手机终端需要支持Google Add-ons

 

作为与Google合作的手机终端的制造商,如果想在自己的Android终端中集成Google的一些应用,例如mapmarketpicasasync等,需要和Google签约,这样Google会有专人帮你将这一系列服务整合到你的平台中来。

 

作为没有和Google合作的手机终端的制造商,我们可以使用破解的方法将Add-ons中的运行库整合到自己的framework中来(build到手机终端的system.img中)。操作如下:

 

1.Android中,额外支持Google Add-ons(Google Maps),需要将如下档案(从标准的SDKpull出来的,也可以从GPhonepull出来)打包进System.imgGoogle Add-ons只需要1--2Goolge Maps(Google的地图程序) 需要1--5

1)system/framework      com.google.android.maps.jar

2)system/etc/permissions  com.google.android.maps.xml

3)system/framework      com.google.android.gtalkservice.jar

4)system/etc/permissions  com.google.android.gtalkservice.xml

5)system/app          Maps.apk (Google Maps v3.0)

 

2.源码:Android Cupcake Release(经测试,在donut平台同样适用。)

1)编译源码(为了生成out/target目录中Android最原始的东西)

2)将以上文件加入out/target/product/generic相应目录,在源码根目录使用make snod打包,获得新的system.img

 

权限和Maps库设置

 

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

                                

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

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

 

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

 

<manifest xmlns:andro; font-size: 12.5pt'> 

<?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

 

<?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.

 

Step4: 修改代码:

package feisky.navigation;

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;
	}
}

Android Map开发基础知识学习笔记

相关文章:

  • 2021-11-28
  • 2022-01-02
  • 2021-11-09
  • 2021-12-04
  • 2021-05-28
  • 2021-11-10
  • 2021-05-22
  • 2021-05-30
猜你喜欢
  • 2021-12-08
  • 2021-12-14
  • 2021-09-07
  • 2021-07-26
  • 2022-03-02
  • 2022-01-23
相关资源
相似解决方案