Android 百度离线地图下载完后调用下载好的离线包

前言  

    最近公司项目需求添加百度地图离线下载后离线地图查看功能,本以为看着文档写一下就行了,看了文档后发现百度文档着实坑爹,文档与实际开发不符合,网上搜了一下,也没搜到确切实用的文章,遂决定写一篇;

步骤

    一;百度离线地图下载完成后,会在手机根目录中生成一个BaiduSDKNew的文件,打开里面的vmp文件夹会看到下载到的离线地图包;



   二,给离线地图下载完成的列表添加点击事件;

        Adapter里面:

//查看离线地图
listItemView.name.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if (list.get(fposition).status==MKOLUpdateElement.FINISHED&&list.get(fposition).ratio==100){
            context.setIntent(list.get(fposition).cityID);
        }else if (list.get(fposition).ratio<100){
            Toast.makeText(context,"请先下载完离线地图",Toast.LENGTH_SHORT).show();
        }
    }
});
Activity里面:
//将点击的城市市中心坐标传递到离线地图加载页
public void setIntent(int cityid){
    MKOLUpdateElement map=mOffline.getUpdateInfo(cityid);
    Intent intent = new Intent(MyDownMapActivity.this, DownMapShowActivity.class);
    Bundle bundle=new Bundle();
    String lon=String.valueOf(map.geoPt.longitude);
    bundle.putString("lon",lon);
    String lat=String.valueOf(map.geoPt.latitude);
    bundle.putString("lat",lat );
    intent.putExtras(bundle);
    startActivity(intent);

}
三、在离线地图查看页获取到坐标并添加离线地图展示,具体看代码;
 
 
public class DownMapShowActivity extends Activity {
    private MapView mMapView;
    FrameLayout layout;
    Double lat;
    Double lon;
    LatLng center;
    float zoom;
    MKOfflineMap mkOfflineMap;

    BaiduMap baiduMap;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        

        MapStatus.Builder builder = new MapStatus.Builder();
        // 该Intent是OfflineDemo中查看离线地图调起的
        Intent intent = getIntent();
        if (null != intent) {
            Bundle bundle=intent.getExtras();
            String latstr=bundle.getString("lat");
            lat=Double.valueOf(latstr);
            String lonstr=bundle.getString("lon");
            lon=Double.valueOf(lonstr);
            Log.e("lon",lon+"");
            center = new LatLng(lat,lon);
            zoom = 13.0f;
        }
        builder.target(center).zoom(zoom);

        setMapCustomFile();

        mMapView = new MapView(this, new BaiduMapOptions());
        initView(this);

        baiduMap=mMapView.getMap();
        //默认显示普通地图
        baiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
        baiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));
        setContentView(layout);
        
    }
    // 初始化View
    private void initView(Context context) {
        layout = new FrameLayout(this);
        layout.addView(mMapView);
    }

    // 读取地图config文件
    private void setMapCustomFile() {
       String str =Environment.getExternalStorageState().toString()+"/BaiduMapSDKNew/vmp/";
        File file = new File(str);
            if (!(file.exists())) {
                try {
                    new File(str).createNewFile();
                    InputStream iinput = openFileInput(str + ".cfg");
                    FileOutputStream output = new FileOutputStream(str);
                    byte[] buffer = new byte[8192];
                    int i = 0;
                    while ((i = iinput.read(buffer)) > 0) {
                        output.write(buffer, 0, i);
                    }
                    output.close();
                    iinput.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
    }
    
    @Override
    protected void onPause() {
        super.onPause();
        // activity 暂停时同时暂停地图控件
        mMapView.onPause();
    }

    @Override
    protected void onResume() {
        super.onResume();
        // activity 恢复时同时恢复地图控件
        mMapView.onResume();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        // activity 销毁时同时销毁地图控件
        mMapView.onDestroy();
    }

}

四、完美展示!


文章有什么不对的地方,还望大神指出。


猜你喜欢

转载自blog.csdn.net/baidu_36600645/article/details/80745460
今日推荐