Android Google Map V2 备忘

Android中可以调用Google Play Service提供的GoogleMap API,在安装了AndroidSDK之后,下载GooglePlay sevices包(通过Android SDK Manager,Extras下的GooglePlay services)。Android版本的Google Maps API的Version1 (V1)现在已经不能生成APIKey,现在一般使用V2。

使用Android Google Map的服务,首先需要得到Android Google Map的API key,步骤如下:

1) 使用JDK提供的keytool找到SHA1验证码,使用命令行命令:

keytool -list -v –keystore debug.keystore,这里,keytool是jkd中的可执行文件,mystore.keystore在用户的目录(如windows下的C:\Users\user)下的.android文件夹下;

2) 将得到的SHA1码加上分号再加上app的包名,在GoogleAPIs Console中生成Android API Key;

3) 在GoogleAPIs Console中开启Google Maps API v2服务 ,具体在Services目录下;

4) 在Androidapp 的manifest文件中,一般都会加入如下权限(<manifest>标签下):

<permission

        android:name="hk.cityu.picguider.permission.MAPS_RECEIVE"

        android:protectionLevel="signature"/>

       

       <uses-permission android:name="hk.cityu.picguider.permission.MAPS_RECEIVE"/>

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

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

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

<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>

另外,需要开启OpenGL的服务(<manifest>标签下):

<uses-feature

        android:glEsVersion="0x00020000"

       android:required="true"/>

在<application>标签下加入APIkey:

<meta-data

           android:name="com.google.android.maps.v2.API_KEY"

           android:value="你的API Key"/>

5) 布局文件:

<?xml version="1.0"encoding="utf-8"?>

<fragmentxmlns:android="http://schemas.android.com/apk/res/android"

         android:id="@+id/map"

         android:layout_width="match_parent"

         android:layout_height="match_parent"

         android:name="com.google.android.gms.maps.SupportMapFragment"/>

6) Activity类:

public class MapMarker extends FragmentActivity {

               

   protected void onCreate(Bundle savedInstanceState) {

       super.onCreate(savedInstanceState);

       setContentView(R.layout.map_marker);

  }

}

7) 这里使用的是SupportMapFragment,因为目标是Android2.3.7(platform 10),在3.0以上(platform 11),可以使用Mapfragment,使用MapFragment可以容易加入比如将地图定位用户当前位置和指南针的功能。


8)基于API Key的Android app,在安装之后,需要联网验证API key(当前版本的Google Play,3.0.27),在此之前,地图会是空白,尽管会显示出zoom的放大和缩小的按钮;另外,如果API Key填写错误,也会出现这种状况。


9) 自定义InfoWindow地图中的Marker标志的Infowindow可以通过一个View类来设置,但是默认来说它并不是一个活动的View,这个View会被当成一个图片,因此默认来说,如果在info window中加入按钮,这个按钮的touch或者click的事件是不会触发的,因为它只是被当做一个静态的图片的一部分,解决方案有两种,一种是使用PopupWindow,但是会有一些显示问题,比如旋转时候需要自己手动改变;也可以重新定义包含MapFragment的ViewGroup,思路如下(已实现):

    1. 保存一个InfoWIndowAdapter中创建的自定义的infoWindow;

2. 将MapFragment包装在自定义的ViewGroup中;

3. 覆盖自定义的ViewGroup中的dispatchTouchEvent方法,将MotionEvents首先交给InfoWidow处理,如果它并不处理这个事件,那么,调用super class 的方法处理它;

4. 在这种情况下,button的状态不会改变,就是说按下也不会显示出按下的状态(外形上),可以通过一些比较hack的方法强制改变,如在按下的时候将button的图标改 变,在松开的时候将button图标改回来。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
牙科就诊管理系统利用当下成熟完善的SSM框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的Mysql数据库进行程序开发。实现了用户在线查看数据。管理员管理病例管理、字典管理、公告管理、药单管理、药品管理、药品收藏管理、药品评价管理、药品订单管理、牙医管理、牙医收藏管理、牙医评价管理、牙医挂号管理、用户管理、管理员管理等功能。牙科就诊管理系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为数据信息面临的安全问题提供了一些实用的解决方案。可以说该程序在帮助管理者高效率地处理工作事务的同时,也实现了数据信息的整体化,规范化与自动化。 管理员在后台主要管理病例管理、字典管理、公告管理、药单管理、药品管理、药品收藏管理、药品评价管理、药品订单管理、牙医管理、牙医收藏管理、牙医评价管理、牙医挂号管理、用户管理、管理员管理等。 牙医列表页面,此页面提供给管理员的功能有:查看牙医、新增牙医、修改牙医、删除牙医等。公告信息管理页面提供的功能操作有:新增公告,修改公告,删除公告操作。公告类型管理页面显示所有公告类型,在此页面既可以让管理员添加新的公告信息类型,也能对已有的公告类型信息执行编辑更新,失效的公告类型信息也能让管理员快速删除。药品管理页面,此页面提供给管理员的功能有:新增药品,修改药品,删除药品。药品类型管理页面,此页面提供给管理员的功能有:新增药品类型,修改药品类型,删除药品类型。
要在 Android 应用程序中使用 Google 地图进行定位,可以使用 Google Play Services SDK 提供的 Location APIs。首先,确保你的应用程序已经在 AndroidManifest.xml 文件中声明了使用定位权限: ``` <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> ``` 然后,在你的代码中使用以下步骤: 1. 检查设备上是否安装了 Google Play Services,如果没有则提示用户安装。 2. 创建 GoogleApiClient 实例并连接到 Google Play Services。 3. 实现 LocationListener 接口并注册位置更新监听器。 4. 请求位置更新。 以下是示例代码: ```java public class MapsActivity extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, LocationListener { private GoogleMap mMap; private GoogleApiClient mGoogleApiClient; private LocationRequest mLocationRequest; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_maps); // 检查 Google Play Services 是否可用 int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getApplicationContext()); if (status != ConnectionResult.SUCCESS) { Toast.makeText(getApplicationContext(), "Google Play Services Not Available", Toast.LENGTH_LONG).show(); finish(); } // 创建 GoogleApiClient 实例 mGoogleApiClient = new GoogleApiClient.Builder(this) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) .addApi(LocationServices.API) .build(); // 创建 LocationRequest 实例 mLocationRequest = new LocationRequest(); mLocationRequest.setInterval(10000); // 定位更新间隔 mLocationRequest.setFastestInterval(5000); mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); } @Override protected void onStart() { super.onStart(); mGoogleApiClient.connect(); } @Override protected void onStop() { super.onStop(); if (mGoogleApiClient.isConnected()) { mGoogleApiClient.disconnect(); } } @Override public void onConnected(Bundle bundle) { // 连接到 Google Play Services 成功 LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this); } @Override public void onConnectionSuspended(int i) { // 连接中断 } @Override public void onConnectionFailed(ConnectionResult connectionResult) { // 连接失败 } @Override public void onLocationChanged(Location location) { // 收到位置更新 mMap.clear(); LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude()); mMap.addMarker(new MarkerOptions().position(latLng).title("Current Location")); mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng)); mMap.animateCamera(CameraUpdateFactory.zoomTo(15)); } } ``` 注意:在使用此代码之前,需要在项目中添加 Google Play Services SDK 和 Google Maps API。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值