android google map

方河
2023-12-01

 

关于android下开发google map需要注意的若干问题

关于android下开发google map需要注意的若干问题

1:申请google map api key,这个是必须的,网上看看就知道。

2:软件的版本,android sdk和google map包分别对应的android api版本必须一致。

3:构建项目时就选择好 build target 为 google apis,如果开始你是选择 android 2.2(或者android的其他版本,我这里用的是目前最新的版本),那么以后在项目中再去添加maps.jar,且修改build target,程序运行容易出错。

build target 为 google apis 时,构建的工程会自动为我们生成相关的配置项,这个和选择 android 2.2 是略有不一样的,

比如:default.properties 文件最后的一行是:target=Google Inc.:Google APIs:8

而 android 2.2 工程下的是:target=android-8

另外在 AndroidManifest.xml 也自动加上了:uses-permission 、uses-library 等节点。

4:示例代码(仅展示一下地图,本身就支持拖动)

主 Activity 类:

 package valsun.com;

import android.os.Bundle;
import android.util.Log;

import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;

public class LocationActivity extends MapActivity {

 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);

  Log.i("welcome", "created map activity.");
 }

 @Override
 protected boolean isRouteDisplayed() {
  return false;
 }

}
main.xml 文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <com.google.android.maps.MapView
        android:id="@+id/map_view" android:layout_width="fill_parent"
        android:layout_height="fill_parent" android:enabled="true"
        android:clickable="true"  android:apiKey="这里换成你自己的api key" />
</LinearLayout>
default.properties 文件:

target=Google Inc.:Google APIs:8
AndroidManifest.xml 文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
 package="valsun.com" 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=".LocationActivity" 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="8" />

</manifest>

测试通过!

 

 

 

 

 

 

 

 

Android Google map使用心得

作者:汪春

Android Google map使用

1、使用Android Google Map Api之前必须检测系统中是否安装了Google map 应用,检测方法如下:

protected boolean checkGoogleMap(){
lean isInstallGMap = false;
     List<PackageInfo>
packs = getPackageManager().getInstalledPackages(0);
for (int i = 0; i < packs.size(); i++) {
PackageInfo p = packs.get(i);
if (p.versionName == null) { // system packages
     continue;
}
if ("com.google.android.apps.maps".equals(p.packageName)) {
    isInstallGMap = true;
    break;
}
}
return isInstallGMap;
}

2、当检测出系统中没有安装Google map 应用时,可以转向Web版的Google map 来访问,如下:

Intent it = new Intent(
Intent.ACTION_VIEW, Uri.parse(
"http://ditu.google.cn/maps?hl=zh&mrt=loc&q="+weiduExtra+",
"+jingduExtra+""));
 startActivity(it);
 注意:使用此方法需在AndroidManifest.xml中加入网络访问权限
<uses-permission android:name="android.permission.INTERNET">
</uses-permission>

3、当检测出系统中已经安装Google map 应用时,我们就可以使用Google map api 了,使用方法如下:

1)方法一:

Intent it = new Intent(
Intent.ACTION_VIEW, Uri.parse("geo:"+weiduExtra+",
"+jingduExtra));
startActivity(it);
注意:使用此方法需在AndroidManifest.xml中加入相应的访问权限
<uses-permission android:name="android.permission.
ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.
INTERNET" />

2)方法二:

可以创建一个MapActivity的子类,将MapView显示于其上即可,可以用MapController来控制显示的坐标、地图模式和视野高度,处理起来非常简单。

Java代码 :

public class MapTest extends MapActivity { 
	private MapView mapView; 
	private MapController mc; 

	@Override 
	public void onCreate(Bundle savedInstanceState) { 
	super.onCreate(savedInstanceState); 
	setContentView(R.layout.mapview); 
	
	mapView = (MapView) findViewById(R.id.map); 
	mapView.setTraffic(true); 
	mc = mapView.getController(); 

	GeoPoint gp = new GeoPoint((int) (30.659259 * 1000000), 
	(int) (104.065762 * 1000000)); //地理坐标 
	mc.animateTo(gp); 
	mc.setZoom(12); 
	} 

	@Override 
	protected boolean isRouteDisplayed() { 
	return false; 
	} 
	} 
    public class MapTest extends MapActivity {
	private MapView mapView;
	private MapController mc;

	@Override
	public void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	setContentView(R.layout.mapview);
    mapView = (MapView) findViewById(R.id.map);
	mapView.setTraffic(true);
	mc = mapView.getController();

	GeoPoint gp = new GeoPoint((int) (30.659259 * 1000000), 
	(int) (104.065762 * 1000000)); //地理坐标
	mc.animateTo(gp);
	mc.setZoom(12);
	}
    @Override
	protected boolean isRouteDisplayed() {
	return false;
	}
	}
	mapview.xml内容如下: 
	Xml代码 
<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http:
//schemas.android.com/apk/res/android" 
	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="0mHnPl2NS9XPKx6pKwJriV2Wj-mEHSh71yyX_SQ" 
	/> 
</RelativeLayout> 
    <?xml version="1.0" encoding="utf-8"?>
	<RelativeLayout xmlns:android="http:
	//schemas.android.com/apk/res/android"
	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="0mHnPl2NS9XPKx6pKwJriV2Wj-mEHSh71yyX_SQ"
	/>
</RelativeLayout> 

注意:

A、使用此方法需在AndroidManifest.xml中加入相应的访问权限。

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

B、你要申请一个自己的apiKey。

 

 

 

 

 

 

 

 

 

Android开发如何利用Google map

自google 06年进入中国,在地图、移动领域的发展速度基本上都是每年几倍的增长。在最新的Android平台开发相关应用程序,如果能深入了解google map 将会对我们Android开发提供很大的帮助.以下是我总结的在Android开发中对google map的理解。

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 -keysto
re "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来创建。

 

实例分析


最后,按照惯例,还是用一个小程序来演示一下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; 
    /** Called when the activity is first created. */ 
    @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; 
                    /* User clicked on a radio button do some stuff */ 
                } 
            }) 
            .setPositiveButton(R.string.alert_dialog_ok, new DialogInterface.OnClickListener() { 
                public void onClick(DialogInterface dialog, int whichButton) { 
                    /* User clicked Yes so do some stuff */ 
                    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) { 
                    /* User clicked No so do some stuff */ 
                } 
            }) 
           .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) { 
                    /* User clicked so do some stuff */ 
                    String[] items = getResources().getStringArray(R.array.select_dialog_items); 
                    /*new AlertDialog.Builder(this) 
                            .setMessage("You selected: " + which + " , " + items[which]) 
                            .show();*/ 
                    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开发人员在实际开发中的总结!

 类似资料:

相关阅读

相关文章

相关问答