最近在做一个充电站的项目,首页要求是地图显示 ,刚开始用的demo是百度SDK2.4的 公司还要集成ping++ 支付 ,搞来搞去各种不兼容 ,后来换成3.0的以后就解决了 ,真心不明白为什么啊 !
一个安卓项目要求半个月完成 ,我只想说外包公司真的很苦逼 ,工资也低一个月才4000 ,还累的跟狗一样 ,不过真的挺锻炼人的 ,如果想要锻炼一下自己的朋友可以找个外包公司锻炼一下 ,由于本人第一次写博客 ,不为别的 ,只为记录一下,以后万一其他地方也用到了 ,方便查找,也给有同样需求的朋友们提供一种思路,废话不多说,先看效果图吧!(我看别人的博客就喜欢先看效果图 ,一看就知道这篇博客大致说的什么,第二也能清楚的知道是不是自己想要的功能)
工程结构图:
使用百度地图 ,需要在manifest文件中添加一些权限:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" >
</uses-permission>
<uses-permission android:name="android.permission.INTERNET" >
</uses-permission>
<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
<uses-permission android:name="android.permission.WAKE_LOCK" >
</uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- SDK1.5需要android.permission.GET_TASKS权限判断本程序是否为当前运行的应用? -->
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" >
</uses-permission>
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<!-- 这个权限用于进行网络定位 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" >
</uses-permission>
<!-- 这个权限用于访问GPS定位 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" >
</uses-permission>
<!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" >
</uses-permission>
<!-- 获取运营商信息,用于支持提供运营商信息相关的接口 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" >
</uses-permission>
<!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位 -->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" >
</uses-permission>
<!-- 用于读取手机当前的状态 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" >
</uses-permission>
<!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" >
</uses-permission>
<!-- 访问网络,网络定位需要上网 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- SD卡读取权限,用户写入离线定位数据 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" >
</uses-permission>
<!-- 允许应用读取低级别的系统日志文件 -->
<uses-permission android:name="android.permission.READ_LOGS" >
</uses-permission>
我个人遇到的问题以及解决方案都已经在代码里标明了 希望能给大家一点帮助!
if (m == marker[index]) {
// 将marker所在的经纬度的信息转化成屏幕上的坐标
final LatLng ll = marker[index].getPosition();
Point p = mBaiduMap.getProjection().toScreenLocation(ll);
p.y -= 47;
Log.e("将经纬度转换成屏幕上的坐标", "--!" + p.x + " , " + p.y);
LatLng llInfo = mBaiduMap.getProjection().fromScreenLocation(p);
Log.e("经纬度", llInfo.latitude + " "+ llInfo.longitude);
/****
* 问题 如果 mInfoWindow = new InfoWindow(popupWindow,
* llInfo, -80); 那么点击这个Marker弹出的window就会随着地图的放大缩小而越来越远
*
*/
// 为弹出的InfoWindow添加点击事件
mInfoWindow = new InfoWindow(popupWindow, ll, -80);//-40这个值 影响弹框距离Marker的位置
/***
* 加上这两句 实现的一个功能是点击Marker图标后
*
*
* 将marker显示在屏幕中间
*/
MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(ll);
mBaiduMap.setMapStatus(u);
tv_yuyue = (TextView) popupWindow.findViewById(R.id.tv_yuyue);
tv_yuyue.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Log.e("预约", "预约");
}
});
tv_daohang = (TextView) popupWindow.findViewById(R.id.tv_daohang);
tv_daohang.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Log.e("预约", "单行");
}
});
}
}
// 显示InfoWindow
mBaiduMap.showInfoWindow(mInfoWindow);
最后项目的运行效果图:
demo下载地址:点击下载