2016年3月5日 星期六

Step By Step 簡易Mapsforge App開發:LayerAdder


目標Achievements


這個類別目的是要用來做動態新增圖層


程式碼Code


package lien.ching.maptracker.api;

import android.app.DownloadManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

import org.mapsforge.map.android.graphics.AndroidGraphicFactory;
import org.mapsforge.map.android.util.AndroidUtil;
import org.mapsforge.map.android.view.MapView;
import org.mapsforge.map.layer.cache.TileCache;
import org.mapsforge.map.layer.labels.LabelLayer;
import org.mapsforge.map.layer.renderer.TileRendererLayer;
import org.mapsforge.map.reader.MapFile;
import org.mapsforge.map.rendertheme.InternalRenderTheme;
import org.mapsforge.map.rendertheme.rule.RenderTheme;

import java.io.File;

import lien.ching.maptracker.Constant;
import lien.ching.maptracker.overlay.NowLocationLayout;

/**
 * Created by lienching on 1/7/16.
 */

//http://developer.android.com/reference/android/content/BroadcastReceiver.html
public class LayerAdder extends BroadcastReceiver {
    private MapView mapView;
    private String target;
    private NowLocationLayout locationLayout;
    private Long enqueue;
    public LayerAdder(MapView mapView,NowLocationLayout locationLayout,String target,Long enqueue){
        super();
        this.mapView = mapView;
        this.target = target;
        this.enqueue = enqueue;
        this.locationLayout = locationLayout;
    }
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(action)) {
            long downloadId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, 0);
            if(downloadId == enqueue){
                MapFile targetFile = new MapFile(new File(Constant.PATH_MAPSFORGE+target));
                TileCache tileCache = AndroidUtil.createTileCache(context, "mapcache", mapView.getModel().displayModel.getTileSize(), 1f, mapView.getModel().frameBufferModel.getOverdrawFactor());
                TileRendererLayer tileRendererLayer = AndroidUtil.createTileRendererLayer(tileCache,mapView.getModel().mapViewPosition,targetFile, InternalRenderTheme.OSMARENDER,true,true);
                tileRendererLayer.setXmlRenderTheme(InternalRenderTheme.OSMARENDER);
                mapView.getLayerManager().getLayers().add(tileRendererLayer);
                mapView.getLayerManager().getLayers().remove(locationLayout);//LocationLayout need be the top layout of the mapview, to keep user location visible
                mapView.getLayerManager().getLayers().add(locationLayout);
                Log.d("LayerAdder",target+" Download Completed"+", LayerAdd");
            }
        }
    }
}
 

說明Explanation


BroadcastReceiver是我用來去偵測檔案是否下載完成的類別

沒有留言:

張貼留言