高德地图的使用之自动定位和marker的点击显示自定义PopupWindow
来源:互联网 发布:易企秀一样的软件 编辑:程序博客网 时间:2024/06/04 17:54
最近项目需要集成高德地图,并实现自动定位上传和marker的点击显示PopupWindow,然后再对PopupWindow中的控件进行点击实现跳转功能,大概了解了需求之后,我就进入高德地图Api开放平台 申请应用的key,申请Key的步骤在高德开发文档中有,如图所示:
获取应用的key是需要应用签名 SHA1,获取它的方法有好多,我给大家推荐下面的方法,个人认为最好用,
在Activity中的进入是时执行并打印出,即可获得SHA1;
@Override protected void onCreate(Bundle savedInstanceState) {
String sha1=getSHA1(getApplicationContext());
Log.e("this is sha1",sha1);
}
public static String getSHA1(Context context) { try { PackageInfo info = context.getPackageManager().getPackageInfo( context.getPackageName(), PackageManager.GET_SIGNATURES); byte[] cert = info.signatures[0].toByteArray(); MessageDigest md = MessageDigest.getInstance("SHA1"); byte[] publicKey = md.digest(cert); StringBuffer hexString = new StringBuffer(); for (int i = 0; i < publicKey.length; i++) { String appendString = Integer.toHexString(0xFF & publicKey[i]) .toUpperCase(Locale.US); if (appendString.length() == 1) hexString.append("0"); hexString.append(appendString); hexString.append(":"); } String result = hexString.toString(); return result.substring(0, result.length()-1); } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return null; }
获取key后需要在AndroidManifest.xml中声明使用,同时添加一些权限
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.administrator.gaodemodel"> <!--用于进行网络定位--> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <!--用于访问GPS定位--> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!--用于获取运营商信息,用于支持提供运营商信息相关的接口--> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!--用于访问wifi网络信息,wifi信息会用于进行网络定位--> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!--用于获取wifi的获取权限,wifi信息会用来进行网络定位--> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <!--用于访问网络,网络定位需要上网--> <uses-permission android:name="android.permission.INTERNET" /> <!--用于读取手机当前的状态--> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <!--用于写入缓存数据到扩展存储卡--> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!--用于申请调用A-GPS模块--> <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /> <!--用于申请获取蓝牙信息进行室内定位--> <uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <!--高德地图--> <meta-data android:name="com.amap.api.v2.apikey" android:value="28546683d437233513dd4a7989e956ed" /> <service android:name="com.amap.api.location.APSService"/> <activity android:name=".XiangqingActiviy"/> </application></manifest>
下面我贴出MainActivity.java的内容,大家可以祥观一下,
1)自动定位
public AMapLocationListener mapLocationListener = new AMapLocationListener() { @Override public void onLocationChanged(AMapLocation aMapLocation) { if (aMapLocation != null) { if (aMapLocation.getErrorCode() == 0) { //定位成功 double lat; double lon; aMapLocation.getLocationType();// 获取当前定位结果来源,如网络定位结果,详见定位类型表 lat = aMapLocation.getLatitude();//纬度 lon = aMapLocation.getLongitude();// 经度 SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String date = df.format(new Date()); // 设置当前地图显示为当前位置 aMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(lat, lon), 19)); MarkerOptions markerOptions = new MarkerOptions(); // markerOptions.position(new LatLng(lat, lon)); markerOptions.title("当前位置"); markerOptions.snippet("hdfeuf"); markerOptions.visible(true); // 设置自定义marker// BitmapDescriptor bitmapDescriptor = BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(getResources(), R.mipmap.doctor));// markerOptions.icon(bitmapDescriptor); aMap.addMarker(markerOptions); marker2 = aMap.addMarker(markerOptions); //进入地图就显示pop// marker2.showInfoWindow(); Log.e("经纬度", "纬度::" + lat + "-----经度::" + lon + "===时间:" + date); } else { //显示错误信息ErrCode是错误码errInfo是错误信息,详见错误码表。 Log.e("AmapError", "location Error, ErrCode:" + aMapLocation.getErrorCode() + ", errInfo:" + aMapLocation.getErrorInfo()); } } } };
/** * 设置一些amap的属性 */private void setUpMap() { // 如果要设置定位的默认状态,可以在此处进行设置 myLocationStyle = new MyLocationStyle(); //设置定位蓝点精度圆圈的边框颜色的方法。 myLocationStyle.strokeColor(R.color.blue); //设置定位蓝点精度圆圈的填充颜色的方法 myLocationStyle.radiusFillColor(R.color.white); //设置是否显示定位小蓝点,用于满足只想使用定位,不想使用定位小蓝点的场景,设置false以后图面上不再有定位蓝点的概念,但是会持续回调位置信息。 myLocationStyle.showMyLocation(true); myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATE);//定位一次,且将视角移动到地图中心点。 aMap.setMyLocationStyle(myLocationStyle); aMap.getUiSettings().setMyLocationButtonEnabled(true);// 设置默认定位按钮是否显示 aMap.setOnMarkerClickListener(this);// 设置点击marker事件监听器 aMap.setOnInfoWindowClickListener(this);// 设置点击infoWindow事件监听器 aMap.setInfoWindowAdapter(this);// 设置自定义InfoWindow样式 aMap.setOnMarkerClickListener(this);// 设置点击marker事件监听器}private void setMyLocation() { mapLocationClient = new AMapLocationClient(getApplicationContext()); mapLocationClient.setLocationListener(mapLocationListener); //初始化定位参数 mapLocationClientOption = new AMapLocationClientOption(); //设置定位模式为高精度模式,Battery_Saving为低功耗模式,Device_Sensors是仅设备模式 mapLocationClientOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy); //设置是否返回地址信息(默认返回地址信息) mapLocationClientOption.setNeedAddress(true); //设置是否只定位一次,默认为false mLocationOption.setOnceLocation(false); //设置是否强制刷新WIFI,默认为强制刷新 mapLocationClientOption.setWifiActiveScan(true); //设置是否允许模拟位置,默认为false,不允许模拟位置 mapLocationClientOption.setMockEnable(false); //设置定位间隔,单位毫秒,默认为2000ms mapLocationClientOption.setInterval(5000); //给定位客户端对象设置定位参数 mapLocationClient.setLocationOption(mapLocationClientOption); //启动定位 mapLocationClient.startLocation();}
2)自定义的PopupWindow的点击事件
@Overridepublic void onInfoWindowClick(Marker marker) { titleUi.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(v.getContext(), "你点击了文字", Toast.LENGTH_SHORT).show(); } }); imageView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(v.getContext(), "你点击了图片", Toast.LENGTH_SHORT).show(); } });}/** * 自定义infowinfow窗口 */public void render(Marker marker, View view) { // 设置不同的图片内容 Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.get1); imageView = (ImageView) view.findViewById(R.id.badge); imageView.setImageBitmap(ImageUtils .getRoundCornerImage(bitmap, 30)); String title = marker.getTitle(); titleUi = ((TextView) view.findViewById(R.id.title)); if (title != null) { SpannableString titleText = new SpannableString(title); titleText.setSpan(new ForegroundColorSpan(Color.RED), 0, titleText.length(), 0); titleUi.setText(titleText); } else { titleUi.setText(""); } String snippet = marker.getSnippet(); TextView snippetUi = ((TextView) view.findViewById(R.id.snippet)); if (snippet != null) { SpannableString snippetText = new SpannableString(snippet); snippetText.setSpan(new ForegroundColorSpan(Color.GREEN), 0, snippetText.length(), 0); // snippetUi.setTextSize(20); snippetUi.setText(snippetText); } else { snippetUi.setText(""); }}@Overridepublic boolean onMarkerClick(Marker marker) { if (marker.equals(marker2)) { if (aMap != null) { } } return false;}我写的demo的源码有需要的可以下下来看看,里面还有一个知点画线的功能。
阅读全文
0 0
- 高德地图的使用之自动定位和marker的点击显示自定义PopupWindow
- 高德地图 amap 显示 marker和自定义的infoWindow
- 高德地图自定义marker的图片定位的问题
- 高德地图自定义Marker点击时出现的InfoWindow
- 我的高德地图之定位,Marker,位置信息。
- 高德地图自定义marker不显示的问题
- 高德地图(二)之显示定位,比例尺和添加Marker
- 高德地图之地图篇----->定位的蓝点、添加Marker
- 高德地图自定义Marker显示文字
- 高德地图自定义Marker显示文字
- 高德地图API开发应用-----地图显示+定位+marker
- 百度地图Marker的定位和方向
- 关于高德地图 自定义Marker使用自己的XMl布局的操作
- 关于高德地图 自定义Marker使用自己的XMl布局的操作
- 高德地图点击marker,infoWindow不显示问题
- 关于高德地图,自定义Marker使用自己的XMl,Glide加载图片流程
- 高德地图开发【覆盖物显示——Marker的使用(一)】
- 高德地图开发【覆盖物显示——Marker的使用(一)】
- L2-006. 树的遍历(利用后序中序还原二叉树)
- RSAUtil
- hihoCoder #1000:A+B (大整数)题解
- Java就业指导
- webdriver浏览器的部分属性
- 高德地图的使用之自动定位和marker的点击显示自定义PopupWindow
- Windows下修改MySQL编码为utf8
- oracle 基础知识 一
- MySQL中文乱码问题
- HTTP Status 415
- java-基础-1.2 浮点型
- jQuery之防止冒泡事件
- grunt的使用
- C++文件的读-写(文本文件和二进制文件)