在以前的电子商务项目中,需要在google地图中比较符合用户条件的酒店的位置以及添加相关的说明图层,只是调用google的js实现即可,现在在android开发中可以使用google 的android api实现。
keytool -list -alias androiddebugkey -keystore "C:\Documents and Settings\Administrator\.android\debug.keystore" -storepass android -keypass android
Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.
C:\Documents and Settings\Administrator>cd C:\Program Files\Java\jdk1.6.0_14\bin
C:\Program Files\Java\jdk1.6.0_14\bin>keytool -list -alias androiddebugkey -keys
tore debug.keystore -storepass android -keypass android
keytool错误: java.lang.Exception: Keystore文件存在,但为空文件: debug.keystore
C:\Program Files\Java\jdk1.6.0_14\bin>keytool -list -keystore ~/.android/debug.k
eystore
keytool错误: java.lang.Exception: Keystore 文件不存在: ~/.android/debug.keysto
re
C:\Program Files\Java\jdk1.6.0_14\bin>keytool -help
keytool 用法:
-certreq [-v] [-protected]
[-alias <别名>] [-sigalg <sigalg>]
[-file <csr_file>] [-keypass <密钥库口令>]
[-keystore <密钥库>] [-storepass <存储库口令>]
[-storetype <存储类型>] [-providername <名称>]
[-providerclass <提供方类名称> [-providerarg <参数>]] ...
[-providerpath <路径列表>]
-changealias [-v] [-protected] -alias <别名> -destalias <目标别名>
[-keypass <密钥库口令>]
[-keystore <密钥库>] [-storepass <存储库口令>]
[-storetype <存储类型>] [-providername <名称>]
[-providerclass <提供方类名称> [-providerarg <参数>]] ...
[-providerpath <路径列表>]
-delete [-v] [-protected] -alias <别名>
[-keystore <密钥库>] [-storepass <存储库口令>]
[-storetype <存储类型>] [-providername <名称>]
[-providerclass <提供方类名称> [-providerarg <参数>]] ...
[-providerpath <路径列表>]
-exportcert [-v] [-rfc] [-protected]
[-alias <别名>] [-file <认证文件>]
[-keystore <密钥库>] [-storepass <存储库口令>]
[-storetype <存储类型>] [-providername <名称>]
[-providerclass <提供方类名称> [-providerarg <参数>]] ...
[-providerpath <路径列表>]
-genkeypair [-v] [-protected]
[-alias <别名>]
[-keyalg <keyalg>] [-keysize <密钥大小>]
[-sigalg <sigalg>] [-dname <dname>]
[-validity <valDays>] [-keypass <密钥库口令>]
[-keystore <密钥库>] [-storepass <存储库口令>]
[-storetype <存储类型>] [-providername <名称>]
[-providerclass <提供方类名称> [-providerarg <参数>]] ...
[-providerpath <路径列表>]
-genseckey [-v] [-protected]
[-alias <别名>] [-keypass <密钥库口令>]
[-keyalg <keyalg>] [-keysize <密钥大小>]
[-keystore <密钥库>] [-storepass <存储库口令>]
[-storetype <存储类型>] [-providername <名称>]
[-providerclass <提供方类名称> [-providerarg <参数>]] ...
[-providerpath <路径列表>]
-help
-importcert [-v] [-noprompt] [-trustcacerts] [-protected]
[-alias <别名>]
[-file <认证文件>] [-keypass <密钥库口令>]
[-keystore <密钥库>] [-storepass <存储库口令>]
[-storetype <存储类型>] [-providername <名称>]
[-providerclass <提供方类名称> [-providerarg <参数>]] ...
[-providerpath <路径列表>]
-importkeystore [-v]
[-srckeystore <源密钥库>] [-destkeystore <目标密钥库>]
[-srcstoretype <源存储类型>] [-deststoretype <目标存储类型>]
[-srcstorepass <源存储库口令>] [-deststorepass <目标存储库口令>]
[-srcprotected] [-destprotected]
[-srcprovidername <源提供方名称>]
[-destprovidername <目标提供方名称>]
[-srcalias <源别名> [-destalias <目标别名>]
[-srckeypass <源密钥库口令>] [-destkeypass <目标密钥库口令>]]
[-noprompt]
[-providerclass <提供方类名称> [-providerarg <参数>]] ...
[-providerpath <路径列表>]
-keypasswd [-v] [-alias <别名>]
[-keypass <旧密钥库口令>] [-new <新密钥库口令>]
[-keystore <密钥库>] [-storepass <存储库口令>]
[-storetype <存储类型>] [-providername <名称>]
[-providerclass <提供方类名称> [-providerarg <参数>]] ...
[-providerpath <路径列表>]
-list [-v | -rfc] [-protected]
[-alias <别名>]
[-keystore <密钥库>] [-storepass <存储库口令>]
[-storetype <存储类型>] [-providername <名称>]
[-providerclass <提供方类名称> [-providerarg <参数>]] ...
[-providerpath <路径列表>]
-printcert [-v] [-file <认证文件>]
-storepasswd [-v] [-new <新存储库口令>]
[-keystore <密钥库>] [-storepass <存储库口令>]
[-storetype <存储类型>] [-providername <名称>]
[-providerclass <提供方类名称> [-providerarg <参数>]] ...
[-providerpath <路径列表>]
C:\Program Files\Java\jdk1.6.0_14\bin>keytool -list -alias androiddebugkey -keys
tore "C:\Documents and Settings\Administrator\.android\debug.keystore" -storepas
s android -keypass android
androiddebugkey, 2011-11-22, PrivateKeyEntry,
认证指纹 (MD5): 1E:2E:00:B0:31:C2:5F:80:50:D8:6C:06:D4:46:2F:B1
C:\Program Files\Java\jdk1.6.0_14\bin\keytool -list -alias androiddebugkey -keystore "C:\Documents and Settings\Administrator\.android\debug.keystore" -storepass android -keypass android
keytool -list -alias androiddebugkey -keystore "C:\Documents and Settings\Administrator\.android\debug.keystore" -storepass android -keypass android
package com.easyway.android.ui;
import java.util.List;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
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 com.google.android.maps.Overlay;
import com.google.android.maps.OverlayItem;
/**
* 实现Google 地图中带自定义的图层的方法
* 1.
* @author longgangbai
*
*/
public class CustomItemizedOverlayActivity extends MapActivity {
private MapView mapView;
private MapController mapController ;
/**
*
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//设置布局
setContentView(R.layout.main);
//获取google地图对象
mapView = (MapView) findViewById(R.id.mapView);
//设置可以缩放的功能
mapView.setBuiltInZoomControls(true);
//获取所有的图层
List<Overlay> mapOverlays = mapView.getOverlays();
//获取图片
Drawable drawable = this.getResources().getDrawable(R.drawable.gps);
//获取图表
CustomItemizedOverlay itemizedOverlay =
new CustomItemizedOverlay(drawable, this);
//北京的中心是北纬39度54分26.37秒,东经116度23分29.22秒。国旗基座的位置是北纬39度54分19.97秒,东经116度23分29.34秒。人民英雄纪念碑的位置是北纬39度54分11.40秒,东经116度23分29.88秒
//设置经纬度
GeoPoint point= new GeoPoint(39971036, 116314659);
//创建图层项
OverlayItem overlayitem =
new OverlayItem(point, "Hello", "Welcome to beijing's TianAnMen !");
//添加一个图层项
itemizedOverlay.addOverlay(overlayitem);
mapOverlays.add(itemizedOverlay);
//添加图层项目
mapController = mapView.getController();
//定位到所要的经纬度
mapController.animateTo(point);
//以此经纬度为中心
mapController.setCenter(point);
mapController.setZoom(6);
}
@Override
protected boolean isRouteDisplayed() {
return true;
}
}
package com.easyway.android.ui;
import java.util.ArrayList;
import android.app.AlertDialog;
import android.content.Context;
import android.graphics.drawable.Drawable;
import com.google.android.maps.ItemizedOverlay;
import com.google.android.maps.OverlayItem;
/**
*
* 自定义地图的图层
* 我们需要为地图多增加一些自定义的功能,比如可以在地图上进行一些标注。
* 为了实现这样的功能,我们可以继承Overlay这个类,这个类是一个基类,提供了
* 可以在地图上添加图层的基本功能。而另外的选择是,我们可以继承itemzedOverlay这个类,
* 需要在构造函数中使用Drawable类,这将被用作来绘制一个标记。
* 此外,我们使用ArrayList
* 去保存所有的Overlayitems,而createitem和size方法则容易理解了,
* 分别是返回每一个
* Overlayitem和返回目前的所有标记的数目。而onTap方法则是在当某个标记在地图上真正标注时
* 所触发的,比如当在触摸屏上点击时,也可以触发该事件。
*
* 在这个例子中,我们只是通过弹出对
* 话框的方法展示给用户看。最后,在addOverlay方法中,我们向标记数组mapOverlays中增加
* 一个overlayitem标记,并且调用populate方法将其展示出来。
*
* @author longgangbai
*
*/
public class CustomItemizedOverlay extends ItemizedOverlay<OverlayItem> {
private ArrayList<OverlayItem> mapOverlays = new ArrayList<OverlayItem>();
private Context context;
public CustomItemizedOverlay(Drawable defaultMarker) {
super(boundCenterBottom(defaultMarker));
}
public CustomItemizedOverlay(Drawable defaultMarker, Context context) {
this(defaultMarker);
this.context = context;
}
/**
* 获取当前图层
*/
@Override
protected OverlayItem createItem(int i) {
return mapOverlays.get(i);
}
/**
* 获取当前图层个数
*/
@Override
public int size() {
return mapOverlays.size();
}
/**
* 获取当前图层的提示
*/
@Override
protected boolean onTap(int index) {
OverlayItem item = mapOverlays.get(index);
AlertDialog.Builder dialog = new AlertDialog.Builder(context);
dialog.setTitle(item.getTitle());
dialog.setMessage(item.getSnippet());
dialog.show();
return true;
}
/**
* 添加图层的方法
* @param overlay
*/
public void addOverlay(OverlayItem overlay) {
mapOverlays.add(overlay);
this.populate();
}
}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.easyway.android.ui"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="10" />
<!-- 添加访问权限 -->
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<!-- 添加google map 的类库 -->
<uses-library android:name="com.google.android.maps" />
<activity
android:label="@string/app_name"
android:name=".CustomItemizedOverlayActivity" >
<intent-filter >
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<com.google.android.maps.MapView
android:id="@+id/mapView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:enabled="true"
android:clickable="true"
android:apiKey="0S3Q4ZaVtVDhibBF6eIGl30D9JDmXVdvP4sQvnQ"
/>
</LinearLayout>