Карты Bing Mobile SDK Маршрутное сопоставление из пункта А в пункт Б - PullRequest
0 голосов
/ 12 сентября 2018

Я прокладываю маршрут из пункта А в пункт Б. Используя Bing Sdk.В проекте Dummy все работает нормально.Но когда я интегрирую код с моим проектом.Это не работает.Проблема: он не входит в обработчик, который будет получать данные из потока RouteAsync.Я опубликую код моих двух классов здесь.Любая помощь будет высоко оценена.

public class ViewLoadDetailsFragment extends Fragment {

@SuppressWarnings("unused")
private final MapMovedListener mapMovedListener = new MapMovedListener() {
    public void onAvailableChecked() {
        // OPTION Add logic to Update Layers here.
        // This will update data layers when the map is moved.
    }
};
CharSequence[] _dataLayers;
boolean[] _dataLayerSelections;
private BingMapsView bingMapsView;
private GPSManager _GPSManager;
private EntityLayer _gpsLayer;
private ProgressDialog _loadingScreen;
private boolean isMapLoaded = false;

/**
 * Handler for loading Screen
 */
protected Handler loadingScreenHandler = new Handler() {
    public void handleMessage(Message msg) {
        if (msg.arg1 == 0) {
            _loadingScreen.hide();
        } else {
            _loadingScreen.show();
        }
    }
};
private Activity _baseActivity;
private ImageButton btnLayers;
private ImageButton btnZoomIn;
private ImageButton btnZoomOut;
private ImageButton btnMyLocation;

public static boolean checkPermission(final Context context) {
    return ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED
            && ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED;
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);



}

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.view_load_details, container, false);
    _baseActivity = getActivity();
    // Load the map
    Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
        @Override
        public void uncaughtException(Thread thread, Throwable throwable) {
            throwable.printStackTrace();
        }
    });

    btnZoomIn = (ImageButton) view.findViewById(R.id.btnZoomIn);
    btnZoomIn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            bingMapsView.zoomIn();
        }
    });

    btnZoomOut = (ImageButton) view.findViewById(R.id.btnZoomOut);
    btnZoomOut.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            bingMapsView.zoomOut();
        }
    });

    btnMyLocation = (ImageButton) view.findViewById(R.id.btnMyLocation);
    btnMyLocation.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
           /* Coordinate coord = _GPSManager.GetCoordinate();
            if (coord != null) {
                // Center on users GPS location
               *//* bingMapsView.setCenterAndZoom(coord,
                        Constants.DefaultGPSZoomLevel);*//*
            }*/

            //This Code Will Execute on Location Button Click
            DailogLauncher.LaunchDirectionsDialog(_baseActivity, bingMapsView,
                    loadingScreenHandler);
            Toast.makeText(getActivity(),"Method Launched",Toast.LENGTH_SHORT).show();
            Log.d("CheckResponse", "onClick: " + "Method Executed");

        }
    });

    Initialize(view);

   /* while (isMapLoaded){
        DailogLauncher.LaunchDirectionsDialog(MainActivity.this, bingMapsView,
                loadingScreenHandler);
        Toast.makeText(MainActivity.this,"Method Launched",Toast.LENGTH_SHORT).show();
    }*/


    return view;
}

private void Initialize(View view) {
    _baseActivity = getActivity();

    if (!checkPermission(getContext())) {
        ActivityCompat.requestPermissions(
                getActivity(),
                new String[]{Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION},
                PERMISSION_LOCATION_REQUEST_CODE);
    }

    _GPSManager = new GPSManager(getActivity(), new GPSLocationListener());

    // Add more data layers here
    _dataLayers = new String[]{"Traffic"};
    _dataLayerSelections = new boolean[_dataLayers.length];

    _loadingScreen = new ProgressDialog(getContext());
    _loadingScreen.setCancelable(false);
    _loadingScreen.setMessage("Loading...");

    bingMapsView = (BingMapsView) view.findViewById(R.id.mapView);

   /* // Create handler to switch out of Splash screen mode
    final Handler viewHandler = new Handler() {
        public void handleMessage(Message msg) {
            ((ViewFlipper) findViewById(R.id.flipper)).setDisplayedChild(1);
        }
    };*/

    // Add a map loaded event handler
    bingMapsView.setMapLoadedListener(new MapLoadedListener() {
        public void onAvailableChecked() {
           /* // hide splash screen and go to map
            viewHandler.sendEmptyMessage(0);*/

            // Add GPS layer
            _gpsLayer = new EntityLayer(Constants.DataLayers.GPS);
            bingMapsView.getLayerManager().addLayer(_gpsLayer);
            UpdateGPSPin();
            updateMarker();
            Toast.makeText(getActivity(),"Map Loaded",Toast.LENGTH_SHORT).show();
            //mapLoadListner.maploaded();
           /* DailogLauncher.LaunchDirectionsDialog(getActivity(), bingMapsView,
                    loadingScreenHandler);
            Toast.makeText(getActivity(),"Method Launched",Toast.LENGTH_SHORT).show();*/

        }
    });

    /*// Add a entity clicked event handler
    bingMapsView.setEntityClickedListener(new EntityClickedListener() {
        public void onAvailableChecked(String layerName, int entityId) {
            HashMap<String, Object> metadata = bingMapsView
                    .getLayerManager().GetMetadataByID(layerName, entityId);
            DialogLauncher.LaunchEntityDetailsDialog(_baseActivity,
                    metadata);
        }
    });*/

    // Load the map
    bingMapsView.loadMap(Constants.BingMapsKey,
            _GPSManager.GetCoordinate(), Constants.DefaultGPSZoomLevel);
}


private void UpdateGPSPin() {
    PushpinOptions opt = new PushpinOptions();
    opt.Icon = Constants.PushpinIcons.GPS;
    Coordinate coordinate = new Coordinate(33.738045,73.084488);
    Pushpin p = new Pushpin(coordinate, opt);
    if (p.Location != null && _gpsLayer != null) {
        _gpsLayer.clear();
        _gpsLayer.add(p);
        _gpsLayer.updateLayer();
    }
}

public void updateMarker() {
    List<Coordinate> listCoord = new ArrayList<>();
    // EntityLayer is used for map overlay
    EntityLayer entityLayer = (EntityLayer) bingMapsView.getLayerManager()
            .getLayerByName(Constants.DataLayers.Search);
    if (entityLayer == null) {
        entityLayer = new EntityLayer(Constants.DataLayers.Search);
    }
    entityLayer.clear();
    // Use Pushpin to mark on the map
    // PushpinOptions is used to set attributes for Pushpin
    // opt.Icon - The icon of PushPin, opt.Anchor - The position to display Pushpin
    PushpinOptions opt = new PushpinOptions();
    opt.Icon = Constants.PushpinIcons.RedFlag;
    opt.Width = 20;
    opt.Height = 35;
    opt.Anchor = new Point(11, 10);

    // Add the entityLayer to mapView's LayerManager
    bingMapsView.getLayerManager().addLayer(entityLayer);
    entityLayer.updateLayer();

    // set the center location and zoom level of map
    Coordinate coordinate = new Coordinate(33.738045,73.084488);
    bingMapsView.setCenterAndZoom(coordinate, 11);

    // Polyline used to draw lines on the MapView
    // PolylineOptions have multiple attributes for the line
    // polylineOptions.StrokeThickness
    // polylineOptions.StrokeColor
    Polyline routeLine = new Polyline(listCoord);
    PolylineOptions polylineOptions = new PolylineOptions();
    polylineOptions.StrokeThickness = 3;
    routeLine.Options = polylineOptions;
    entityLayer.add(routeLine);
}


public class GPSLocationListener implements LocationListener {
    public void onLocationChanged(Location arg0) {
        UpdateGPSPin();
    }

    public void onProviderDisabled(String arg0) {
    }

    public void onProviderEnabled(String arg0) {
    }

    public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
    }
}


@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
}

}

Здесь код моего класса DailogLauncher.

public class DailogLauncher {

public static void LaunchDirectionsDialog(Activity activity, final BingMapsView bingMapsView, final Handler loadingScreenHandler) {

    String fromText = "islamabad";
    String toText = "lahore";

    if (!Utilities.isNullOrEmpty(fromText) && !Utilities.isNullOrEmpty(toText)) {
        Message viewMsg = new Message();
        viewMsg.arg1 = 1;
        loadingScreenHandler.sendMessage(viewMsg);
        Log.d("CheckResponse", "Dailog Launcher " + "Before Try Block");
        try {
            BingMapsRestService bmService = new BingMapsRestService(Constants.BingMapsKey);
            bmService.RouteAsyncCompleted = new Handler() {
                public void handleMessage(Message msg) {
                    if (msg.obj != null) {
                        org.bingmaps.rest.models.Route route = (org.bingmaps.rest.models.Route) msg.obj;
                        Log.d("CheckResponse", "Dailog Launcher " + "In Handler");

                        EntityLayer routeLayer = (EntityLayer) bingMapsView.getLayerManager().getLayerByName(Constants.DataLayers.Route);
                        Log.d("CheckResponse", "Dailog Launcher " + "In Handler 2");

                        if (routeLayer == null) {
                            routeLayer = new EntityLayer(Constants.DataLayers.Route);
                        }

                        routeLayer.clear();

                        PushpinOptions pOption1 = new PushpinOptions();
                        pOption1.Icon = Constants.PushpinIcons.Start;
                        pOption1.Width = 33;
                        pOption1.Height = 43;
                        pOption1.Anchor = new Point(4, 40);
                        Log.d("CheckResponse", "Dailog Launcher " + "In Handler 3");

                        Pushpin start = new Pushpin(route.RouteLegs.get(0).ActualStart, pOption1);
                        routeLayer.add(start);

                        PushpinOptions pOption2 = pOption1.clone();
                        pOption2.Icon = Constants.PushpinIcons.End;

                        Pushpin end = new Pushpin(route.RouteLegs.get(0).ActualEnd, pOption2);
                        routeLayer.add(end);

                        Polyline routeLine = new Polyline(route.RoutePath);
                        routeLayer.add(routeLine);

                        Log.d("CheckResponse", "Dailog Launcher " + "In Handler 4");

                        bingMapsView.getLayerManager().addLayer(routeLayer);
                        routeLine = null;

                        routeLayer.updateLayer();

                        if (route.BoundingBox != null) {
                            bingMapsView.setMapView(route.BoundingBox);
                            Log.d("CheckResponse", "Dailog Launcher " + "In Handler 5");
                        }

                        route = null;
                        msg.obj = null;
                    }

                    Message v = new Message();
                    v.arg1 = 0;
                    Log.d("CheckResponse", "Dailog Launcher " + "In Handler 6");
                    loadingScreenHandler.sendMessage(v);
                }
            };

            Log.d("CheckResponse", "Dailog Launcher " + "Route Request rr executed");
            RouteRequest rr = new RouteRequest();
            rr.addWaypoint(fromText);
            rr.addWaypoint(toText);
            rr.setRoutePathOutput(RoutePathOutput.Points);

            Log.d("CheckResponse", "Dailog Launcher " + "Route Request rr end & bmsservice.RouteAsync executed");

            bmService.RouteAsync(rr);
        } catch (Exception e) {
            Message v = new Message();
            v.arg1 = 0;
            loadingScreenHandler.sendMessage(v);
            Log.d("CheckResponse", "Dailog Launcher " + "exception Occured");
        }
    }
}

}

Может кто угодно, пожалуйставзгляните на это.

...