首页 > 其他分享 >Android百度地图添加覆盖物(AndroidSDK_v2.4.1)

Android百度地图添加覆盖物(AndroidSDK_v2.4.1)

时间:2023-03-02 13:02:01浏览次数:49  
标签:layout v2.4 pop id content import AndroidSDK Android android


 使用网络功能所需权限:



<!--使用网络功能所需权限  -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE">
</uses-permission>
<uses-permission android:name="android.permission.INTERNET">
</uses-permission>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE">
</uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE">
</uses-permission>
<!-- SDK离线地图和cache功能需要读写外部存储器 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">
</uses-permission>
<uses-permission android:name="android.permission.WRITE_SETTINGS">
</uses-permission>
<!-- 获取设置信息和详情页直接拨打电话需要以下权限 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE">
</uses-permission>
<uses-permission android:name="android.permission.CALL_PHONE">
</uses-permission>
<!-- 使用定位功能所需权限,demo已集成百度定位SDK,不使用定位功能可去掉以下6项 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION">
</uses-permission>
<permission android:name="android.permission.BAIDU_LOCATION_SERVICE">
</permission>
<uses-permission android:name="android.permission.BAIDU_LOCATION_SERVICE">
</uses-permission>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION">
</uses-permission>
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION">
</uses-permission>
<uses-permission android:name="android.permission.ACCESS_GPS"/>


添加对应的开发密钥:



<meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="开发密钥">
</meta-data>



 

 

 DemoApplication.java:

 

package org.lee.android;


import android.app.Application;
import android.content.Context;
import android.widget.Toast;

import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.MKGeneralListener;
import com.baidu.mapapi.map.MKEvent;


public class DemoApplication extends Application {

private static DemoApplication mInstance = null;
public boolean m_bKeyRight = true;
BMapManager mBMapManager = null;


@Override
public void onCreate() {
super.onCreate();
mInstance = this;
initEngineManager(this);
}

public void initEngineManager(Context context) {
if (mBMapManager == null) {
mBMapManager = new BMapManager(context);
}

if (!mBMapManager.init(new MyGeneralListener())) {
Toast.makeText(DemoApplication.getInstance().getApplicationContext(),
"BMapManager 初始化错误!", Toast.LENGTH_LONG).show();
}
}

public static DemoApplication getInstance() {
return mInstance;
}


// 常用事件监听,用来处理通常的网络错误,授权验证错误等
static class MyGeneralListener implements MKGeneralListener {

@Override
public void onGetNetworkState(int iError) {
if (iError == MKEvent.ERROR_NETWORK_CONNECT) {
Toast.makeText(DemoApplication.getInstance().getApplicationContext(), "您的网络出错啦!",
Toast.LENGTH_LONG).show();
}
else if (iError == MKEvent.ERROR_NETWORK_DATA) {
Toast.makeText(DemoApplication.getInstance().getApplicationContext(), "输入正确的检索条件!",
Toast.LENGTH_LONG).show();
}
// ...
}

@Override
public void onGetPermissionState(int iError) {
//非零值表示key验证未通过
if (iError != 0) {
//授权Key错误:
Toast.makeText(DemoApplication.getInstance().getApplicationContext(),
"请在 DemoApplication.java文件输入正确的授权Key,并检查您的网络连接是否正常!error: "+iError, Toast.LENGTH_LONG).show();
DemoApplication.getInstance().m_bKeyRight = false;
}
else{
DemoApplication.getInstance().m_bKeyRight = true;
Toast.makeText(DemoApplication.getInstance().getApplicationContext(),
"key认证成功", Toast.LENGTH_LONG).show();
}
}
}
}

 

 

 

 

 

BaiduMapActivity.java:

 

package org.lee.android;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.View;

import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.map.ItemizedOverlay;
import com.baidu.mapapi.map.MapController;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.OverlayItem;
import com.baidu.mapapi.map.PopupClickListener;
import com.baidu.mapapi.map.PopupOverlay;
import com.baidu.platform.comapi.basestruct.GeoPoint;

public class BaiduMapActivity extends Activity {

BMapManager mBMapMan = null;
MapView mMapView = null;
private MyOverlay mOverlay = null;
private PopupOverlay pop = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.onCreate(savedInstanceState);
// 初始化地图View
initBdMapViews();
//准备要添加的Overlay
addMyOverlay();

}

// 初始化地图View
private void initBdMapViews(){
mBMapMan = new BMapManager(getApplication());
mBMapMan.init(null);
// 注意:请在试用setContentView前初始化BMapManager对象,否则会报错
setContentView(R.layout.baidumap);
mMapView = (MapView) findViewById(R.id.bmapsView);
mMapView.setBuiltInZoomControls(true);
// 设置启用内置的缩放控件
MapController mMapController = mMapView.getController();
// 调整地图中心点
mMapController.setCenter(transformToGeoP(39.915, 116.404));
mMapController.setZoom(12);// 设置地图zoom级别
}

//准备要添加的Overlay
public void addMyOverlay(){
double mLat1 = 39.90923;
double mLon1 = 116.397428;
double mLat2 = 39.9022;
double mLon2 = 116.3922;
double mLat3 = 39.917723;
double mLon3 = 116.3722;
// 用给定的经纬度构造GeoPoint,单位是微度 (度 * 1E6)
GeoPoint p1 = transformToGeoP(mLat1, mLon1);
GeoPoint p2 = transformToGeoP(mLat2, mLon2);
GeoPoint p3 = transformToGeoP(mLat3, mLon3);
//准备overlay图像数据,根据实情情况修复
Drawable mark= getResources().getDrawable(R.drawable.icon_gcoding);
//用OverlayItem准备Overlay数据
OverlayItem item1 = new OverlayItem(p1,"item1","item1");
//使用setMarker()方法设置overlay图片,如果不设置则使用构建ItemizedOverlay时的默认设置
OverlayItem item2 = new OverlayItem(p2,"item2","item2");
item2.setMarker(mark);
OverlayItem item3 = new OverlayItem(p3,"item3","item3");

//创建IteminizedOverlay
mOverlay = new MyOverlay(mark, mMapView);
//将IteminizedOverlay添加到MapView中

mMapView.getOverlays().clear();
mMapView.getOverlays().add(mOverlay);

//现在所有准备工作已准备好,使用以下方法管理overlay.
//添加overlay, 当批量添加Overlay时使用addItem(List<OverlayItem>)效率更高
mOverlay.addItem(item1);
mOverlay.addItem(item2);
mOverlay.addItem(item3);
mMapView.refresh();
}

// 弹出覆盖物
public void showPopupOverlay(GeoPoint p1)
{
//创建pop对象,注册点击事件监听接口
pop = new PopupOverlay(mMapView,new PopupClickListener() {
@Override
public void onClickedPopup(int index) {
//在此处理pop点击事件,index为点击区域索引,点击区域最多可有三个
}
});
View view = getLayoutInflater().inflate(R.layout.pop_layout, null);
View pop_layout = view.findViewById(R.id.pop_layout);
//将View转化成用于显示的bitmap
Bitmap[] bitMaps = { BMapUtil.getBitmapFromView(pop_layout) };
//弹出pop,隐藏pop
pop.showPopup(bitMaps, p1, 32);
}

// 将经纬度转换成GeoPoint
private GeoPoint transformToGeoP(double lat, double lng)
{
return new GeoPoint((int) (lat * 1E6), (int) (lng * 1E6));
}

public class MyOverlay extends ItemizedOverlay<OverlayItem> {
//用MapView构造ItemizedOverlay
public MyOverlay(Drawable mark,MapView mapView){
super(mark,mapView);
}
protected boolean onTap(int index) {
//在此处理item点击事件
System.out.println("item onTap: "+index);
//弹出覆盖物
showPopupOverlay(getItem(index).getPoint());
return true;
}
public boolean onTap(GeoPoint pt, MapView mapView){
if (pop != null)
{
//隐藏覆盖物
pop.hidePop();
}
return false;
}
}

@Override
protected void onDestroy() {
mMapView.destroy();
if (mBMapMan != null) {
mBMapMan.destroy();
mBMapMan = null;
}
super.onDestroy();
}

@Override
protected void onPause() {
mMapView.onPause();
if (mBMapMan != null) {
mBMapMan.stop();
}
super.onPause();
}

@Override
protected void onResume() {
mMapView.onResume();
if (mBMapMan != null) {
mBMapMan.start();
}
super.onResume();
}

}

 

 

 

 

 

 

baidumap.xml:

 


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<com.baidu.mapapi.map.MapView android:id="@+id/bmapsView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true" />

</LinearLayout>


 

 

 

 

 

pop_layout.xml

 

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="fill_parent" >

<RelativeLayout
android:id="@+id/pop_layout"
android:layout_width="fill_parent"
android:layout_height="120dip"
android:background="@drawable/pop_layout_bg" >

<LinearLayout
android:id="@+id/user_logo_layout"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_margin="2dip"
android:gravity="center" >

<ImageView
android:id="@+id/user_logo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/icon" />
</LinearLayout>

<LinearLayout
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_toRightOf="@+id/user_logo_layout"
android:gravity="center"
android:orientation="vertical" >

<LinearLayout
android:id="@+id/time_layout"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dip"
android:layout_marginRight="5dip"
android:layout_marginTop="5dip"
android:text="时间:"
android:textColor="#ffffff"
android:textSize="15dip" />

<TextView
android:id="@+id/time"
android:layout_width="175dip"
android:layout_height="wrap_content"
android:layout_marginLeft="5dip"
android:layout_marginRight="5dip"
android:layout_marginTop="5dip"
android:text="2014年4月25日"
android:textColor="#ffffff"
android:textSize="15dip" />
</LinearLayout>

<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/time_layout"
android:orientation="horizontal" >

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dip"
android:layout_marginRight="5dip"
android:layout_marginTop="5dip"
android:text="地点:"
android:textColor="#ffffff"
android:textSize="15dip" />

<TextView
android:id="@+id/address"
android:layout_width="170dip"
android:layout_height="wrap_content"
android:layout_marginLeft="5dip"
android:layout_marginRight="5dip"
android:layout_marginTop="5dip"
android:text="安徽省合肥市包河区富广大厦"
android:lines="2"
android:ellipsize="end"
android:textColor="#ffffff"
android:textSize="15dip" />
</LinearLayout>
</LinearLayout>
</RelativeLayout>

</RelativeLayout>


 

Android百度地图添加覆盖物(AndroidSDK_v2.4.1)_ide

 

标签:layout,v2.4,pop,id,content,import,AndroidSDK,Android,android
From: https://blog.51cto.com/u_4427045/6095991

相关文章

  • Android病毒分析基础(二)—ChatGPT提问技巧
    今天我们来用最近比较火的“ChatGPT”学习一下Android病毒分析基础,看看和我们之前学的有什么不同,又能学习到什么新的东西,同时了解一下“ChatGPT”提问的一些精髓。和我们......
  • 3月1日Android开学学习
    Android开发的简单控件1.文本显示2.视图基础3.常用布局4.按钮触控5.图像显示文本显示(1)设置文本内容1.在XML文件中通过属性Android:text设置文本Android:text="......
  • Android病毒分析基础(一)
    前期准备环境准备主要就是Android开发的环境,详细的可以参考非充老师白皮书第一章,其中包含了Win、Linux环境,如果需要mac环境配置可以自行检索,或者公众号留言,我们会在后期......
  • Android 获取通话记录和录音文件(直接获取地址)
    获取手机录音通话录音文件的办法, 网上大多的办法是先通过通话记录,查询详细的通话信息,如号码,时长,开始时间,结束时间,然后再到各个机型特定目录里面去查找对比录音文件。(见......
  • Android 开发入门
    文件结构appmainfests下面的AndroidManifest.xml<?xmlversion="1.0"encoding="utf-8"?><manifestxmlns:android="http://schemas.android.com/apk/res/android"......
  • Android 数据的四种存储方式
     简介:作为一个完成的应用程序,数据存储操作是必不可少的。因此,Android系统一共提供了四种数据存储方式。分别是:SharePreference、SQLite、ContentProvider和File。由于And......
  • SkeyeVSS综合安防视频云服务WEB H5无插件播放RTSP摄像机解决方案,拒绝插件,拥抱H5,Window
    SkeyeVSS综合安防视频云服务WEBH5无插件播放RTSP摄像机解决方案,拒绝插件,拥抱H5,WindowsPC、Liunx、Android、iOS全平台支持市场需求视频流媒体监控行业已经进入了互联网......
  • 直播平台制作,Android 悬浮窗延时5秒返回APP问题
    直播平台制作,Android悬浮窗延时5秒返回APP问题案例需求分析:在APP界面,点击Home键后,APP退出后台,同时会打开一个悬浮窗,当用户点击悬浮窗上的按键会返回APP。 出现的问题......
  • Android性能测试方法
    本文围绕以下性能指标介绍测试Android端的测试方法:启动时间:启动APP所需时间流畅度:也称为帧率FPS,指画面每秒传输帧数;帧率越大,页面越流畅。过渡绘制:过度绘制描述的是屏幕......
  • Android 11 引入了“包可见机制”
    需求:用一个应用去拉起另一个应用的服务!IntentbtService=newIntent();btService.setComponent(newComponentName("com.xyauto.textapp","com.xyauto.textapp.de......