本文主要是介绍类似微信QQ的分享我的位置,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在项目中有个IM即时消息模块,需要实现分享位置功能。我的第一反应是看下QQ的分享位置,思考实现步骤,后来决定采用基于高德地图定位方案。在集成高德地图时,碰到一些非代码问题:集成后提示INVALID_USER_SCODE,这往往是SHA1或者包名填错,后来检查重新填写才没报错。这让我受益匪浅,对以后的集成第三方库有很大帮助。那瞬间,才深深体会到“实践才是硬道理”。先看下效果图:
接下来整理一下实现步骤:
1、注册高德地图开发者平台账号(如果已经注册忽略次步骤);
2、创建新应用,这里要填写工程主包名、debug调试版的SHA1值、发布版SHA1值;
以window环境获取debug的SHA1值为例,首先敲入cmd打开命令行,进入.android目录,
输入keytool -list -v -keystore debug.keystore指令,按下回车键,然后输入密码(默认为android),再次按下回车,便可以看到SHA1值,右击标记然后选中SHA1对应值便可粘贴。
3、填写完毕提交后,在应用列表可看到新创建的应用,把key值复制下来,在工程的manifest.xml里面填写meta-data:
<!--高德地图的appKey--><meta-dataandroid:name="com.amap.api.v2.apikey"android:value="9de9eda07cb1de54965460cdaf029cff"/>
4、加上定位需要的权限:
<uses-permission android:name="android.permission.INTERNET"/><uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/><uses-permission android:name="android.permission.READ_PHONE_STATE"/><uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"/>
5、在开发者平台下载定位、地图相关的jar包并且导入到工程里,在gradle的依赖库添加;
compile files('libs/AMap_Location_V1.3.1.jar')compile files('libs/AMap_Services_V2.3.1.jar')compile files('libs/AMap_2DMap_V2.9.0.jar')
经过以上步骤,高德地图的第三方库已经集成到工程里,接下来是具体实现。首先是
同步activity的生命周期:
@Overrideprotected void onCreate(Bundle savedInstanceState) {...mapView.onCreate(savedIn}
@Overrideprotected void onResume() {super.onResume();mapView.onResume();}
@Overrideprotected void onPause() {super.onPause();mapView.onPause();}
@Overrideprotected void onDestroy() {super.onDestroy();mapView.onDestroy();}
初始化Map,并且添加位置标志,设置监听器:
if (aMap == null) {aMap = mapView.getMap();}MarkerOptions markerOptions = new MarkerOptions();markerOptions.icon(BitmapDescriptorFactory.fromResource(R.drawable.location));marker=aMap.addMarker(markerOptions);aMap.setOnCameraChangeListener(new OnCameraChangeListener() {@Overridepublic void onCameraChangeFinish(CameraPosition arg0) {}@Overridepublic void onCameraChange(CameraPosition arg0) {});
实现AMapLocationListenr的OnMapScreenShotListener接口,重写它们俩提供的方法。需要介绍的是
onMapScreenShot(Bitmap arg0),在该方法里将bitmap压缩成指定尺寸的位置截屏图片,并且保存到本
地存储指定目录里,获取地址返回给上一个activity。这样就可以从指定目录读取位置图片并且展示出来,
同时在图片下方显示对应详细地址。效果图如下:
直到这里,已经介绍完毕分享地理位置流程。如果大家有兴趣,可以自己动手集成下高德地图或者百度地图。毕竟遇到问题,然后自己摸索仔细思考,最后解决问题是程序员的一大乐趣。如果大家需要源码参考,可以到我的博客主页下载。
这篇关于类似微信QQ的分享我的位置的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!