分享

学习定位+地图API - zhoujinhuang - JavaEye技术网站

 啵啵比 2010-09-14

学习定位+地图API

 

今天按官方教程做了一个定位+地图的例子了解一下API。拍照的例子没找到官方的例子,瞎搜了一圈例子没做完,明天再整理。

定位、地图相关的配置:

AndroidManifest.xml

Xml代码 复制代码
  1. <application android:icon="@drawable/icon" android:label="@string/app_name">  
  2.     <uses-library android:name="com.google.android.maps" />  
  3.     <activity android:name=".LocationMapActivity" android:label="@string/app_name">  
  4.         <intent-filter>  
  5.             <action android:name="android.intent.action.MAIN" />  
  6.             <category android:name="android.intent.category.LAUNCHER" />  
  7.         </intent-filter>  
  8.     </activity>  
  9. </application>  
  10. <uses-permission android:name="android.permission.INTERNET" />  
  11. <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />  
  12. <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />  

 主要是声明 需要googlemap的lib和互联网和定位的访问权限。

 布局中需要声明MapView

Xml代码 复制代码
  1. <com.google.android.maps.MapView  
  2.  android:id="@+id/mapview" android:layout_width="fill_parent"  
  3.  android:layout_height="fill_parent" android:clickable="true"  
  4.  android:apiKey="0MhdDulsEpJMaz65SIdleweZoylEaKL11yQc_nQ" />  

 关键的地方在apiKey,网上一堆因为这个访问不到地图,问问题的。 apiKey是与应用的签名证书关联的,使用google地图需要在,在http://code.google.com/intl/zh-CN/android/maps-api-signup.html 注册。完整说明见http://code.google.com/intl/zh-CN/android/add-ons/google-apis/mapkey.html

这里只是获得一个与debug密钥匹配的签名。

1 先从debug的密钥库取出密钥

密钥库一般在 C:\Documents and Settings\<user>\.android\debug.keystore
执行命令输入签名

keytool -list -alias androiddebugkey -keystore debug.keystore -storepass android -keypass android

结果类似

Certificate fingerprint (MD5): 94:1E:43:49:87:73:BB:E6:A6:88:D7:20:F1:8E:B5:98 


2 在http://code.google.com/intl/zh-CN/android/maps-api-signup.html进行注册
获取map api key


 

主要的代码:

定位主要的API 是位置服务的访问入口 LocationManager  和 位置服务时间的侦听器LocationListener 。

通过LocationManager访问服务:

 

Java代码 复制代码
  1. LocationManager locMan = (LocationManager) getSystemService(Context.LOCATION_SERVICE);   
  2. locMan.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000,   
  3.         10, myLocationListener);   
  4. locMan.requestLocationUpdates(LocationManager.GPS_PROVIDER, 100010,   
  5.         myLocationListener);  

位置服务有多个Provider,一般是GPS 和 基站定位的,没搞清电信服务商没开放接口的话,如何通过API如何能访问得到基站位置数据。。。

 

 通过LocationListener 接受事件和位置信息

Java代码 复制代码
  1. public final LocationListener myLocationListener = new LocationListener() {   
  2.     //位置变化事件   
  3.     @Override  
  4.     public void onLocationChanged(Location location) {   
  5.         GeoPoint point = new GeoPoint(   
  6.                 (int) (location.getLatitude() * 1000000), (int) (location   
  7.                         .getLongitude() * 1000000));   
  8.         OverlayItem overlayitem2 = new OverlayItem(point, "title",   
  9.                 "snippet2");   
  10.         itemizedOverlay.addOverlay(overlayitem2);   
  11.         mapView.getController().animateTo(point);   
  12.         Log.i(this.getClass().getName(), "---location:"  
  13.                 + location.toString());   
  14.     }   
  15.     //用户关闭位置服务Provider   
  16.     @Override  
  17.     public void onProviderDisabled(String provider) {   
  18.         Log.i(this.getClass().getName(), "---onProviderDisabled:"  
  19.                 + provider.toString());   
  20.     }   
  21.     //用户启用位置服务Provider可用,例如连到GPS卫星信号   
  22.     @Override  
  23.     public void onProviderEnabled(String provider) {   
  24.         Log.i(this.getClass().getName(), "---onProviderEnabled:"  
  25.                 + provider.toString());   
  26.   
  27.     }   
  28.     //位置服务Provider状态变化,例如连到GPS卫星信号   
  29.     @Override  
  30.     public void onStatusChanged(String provider, int status, Bundle extras) {   
  31.         Log.i(this.getClass().getName(), "---onStatusChanged:" + status);   
  32.     }   
  33. };  

 

地图代码:

 

Java代码 复制代码
  1. linearLayout = (LinearLayout) findViewById(R.id.zoomview);   
  2. //获取mapView   
  3. mapView = (MapView) findViewById(R.id.mapview);   
  4. //设置Zoom    
  5. mapView.getController().setZoom(13);   
  6. //zoom的显示控制按钮   
  7. mapView.setBuiltInZoomControls(true);   
  8. //获取地图上的图层   
  9. mapOverlays = mapView.getOverlays();   
  10. //增加一个层,后续在地图上加标识   
  11. drawable = this.getResources().getDrawable(R.drawable.icon);   
  12. itemizedOverlay = new HelloItemizedOverlay(drawable);   
  13. mapOverlays.add(itemizedOverlay);  

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多