Java Android Mapbox NavigationView未加载地图

Java Android Mapbox NavigationView未加载地图,java,android,kotlin,mapbox,mapbox-android,Java,Android,Kotlin,Mapbox,Mapbox Android,在我的应用程序中,我集成了Mapbox,它工作得很好。但现在它没有在NavigationView中加载地图。它在主分支中运行良好,但在BLE功能分支上不起作用,即使我在该活动中没有做任何更改。请在这里找到下面的代码,我正在从MainActivity启动此导航活动,用户可以在MainActivity中选择起点和终点位置 导航活动屏幕: NavigationActivity.java: import android.support.v7.app.AppCompatActivity; import

在我的应用程序中,我集成了Mapbox,它工作得很好。但现在它没有在NavigationView中加载地图。它在主分支中运行良好,但在BLE功能分支上不起作用,即使我在该活动中没有做任何更改。请在这里找到下面的代码,我正在从MainActivity启动此导航活动,用户可以在MainActivity中选择起点和终点位置

导航活动屏幕:

NavigationActivity.java:

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.mapbox.api.directions.v5.models.BannerText;
import com.mapbox.api.directions.v5.models.DirectionsRoute;
import com.mapbox.api.directions.v5.models.LegStep;
import com.mapbox.services.android.navigation.ui.v5.NavigationViewOptions;
import com.mapbox.services.android.navigation.ui.v5.OnNavigationReadyCallback;
import com.mapbox.services.android.navigation.ui.v5.instruction.InstructionLoader;
import com.mapbox.services.android.navigation.v5.milestone.BannerInstructionMilestone;
import com.mapbox.services.android.navigation.v5.milestone.Milestone;
import com.mapbox.services.android.navigation.v5.milestone.MilestoneEventListener;
import com.mapbox.services.android.navigation.v5.routeprogress.RouteProgress;

import java.math.BigDecimal;
import java.util.List;


public class NavigationActivity extends AppCompatActivity implements MilestoneEventListener, OnNavigationReadyCallback {

    private TextView myBanner;
    ImageView next, previous;
    List<LegStep> steps;
    TextView tv_step;
    int currentStepIndex = 0;
    DirectionsRoute currentRoute = null ;
    com.mapbox.services.android.navigation.ui.v5.NavigationView navigationView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_navigations);
        navigationView = findViewById(R.id.navigationView);
        myBanner = findViewById(R.id.dummyBanner);
        tv_step = findViewById(R.id.tv_step);
        next = findViewById(R.id.iv_next);
        previous = findViewById(R.id.iv_previous);
        navigationView.onCreate(savedInstanceState);
        navigationView.initialize(this);

        try{
            currentRoute = (DirectionsRoute) getIntent().getSerializableExtra("route");
            if(currentRoute != null){
                steps = currentRoute.legs().get(0).steps();
                if(steps.size() > 0){
                    setup();
                }
            }
        }catch (Exception e){}
    }

    private void setup(){

        loadText( 0);
        next.setOnClickListener((View v )-> {
            if (currentStepIndex < steps.size() - 2)
                loadText(++currentStepIndex);
        });
        previous.setOnClickListener((View v )-> {
            if (currentStepIndex > 0)
                loadText(--currentStepIndex);
        });
    }

    private void loadText( int index){

        BannerText bannerText = steps.get(index).bannerInstructions().get(0).primary();
        InstructionLoader loader = new InstructionLoader(tv_step, bannerText );
        loader.loadInstruction();
        String text = tv_step.getText().toString();
        String modifier = bannerText.modifier();
        String directionArrow = getDirectionArrow(text, modifier);
        if(!directionArrow.equals(""))
            tv_step.setText(directionArrow + text);
        tv_step.append(" " + getDistanceStr(steps.get(index).distance()));
        Log.d("Debugging modifier", bannerText.toJson());
    }

    @Override
    public void onNavigationReady(boolean isRunning) {

        DirectionsRoute directionsRoute = (DirectionsRoute) getIntent().getSerializableExtra("route");

        NavigationViewOptions options = NavigationViewOptions.builder()
                .directionsRoute(directionsRoute)
                .shouldSimulateRoute(false)
                .milestoneEventListener(this)
                .build();
        navigationView.startNavigation(options);
    }

    @Override
    public void onMilestoneEvent(RouteProgress routeProgress, String instruction, Milestone milestone) {

        try {
            if (milestone instanceof BannerInstructionMilestone) {
                BannerText primaryInstruction = ((BannerInstructionMilestone) milestone).getBannerInstructions().primary();
                primaryInstruction.text();
                InstructionLoader loader = new InstructionLoader(myBanner, primaryInstruction);
                loader.loadInstruction();
                String text = myBanner.getText().toString();
                String modifier = primaryInstruction.modifier();
                String directionArrow = getDirectionArrow(text, modifier);
                if(!directionArrow.equals(""))
                    myBanner.setText(directionArrow + text);

                double distance = routeProgress.currentLegProgress().currentStep().distance();
                String distanceStr = getDistanceStr(distance);
                String milestoneString = myBanner.getText().toString() + distanceStr;
            }
        }catch (Exception e){
            e.printStackTrace();
        }

    }

    private String getDirectionArrow(String text, String modifier){
        Log.e("Debugging", text + "  " + modifier);
        if (text.contains("right") || modifier.contains("right"))
            return  ">  ";
        else if (text.contains("left") || modifier.contains("left"))
            return  "<  ";
        else if (text.contains("straight") || modifier.contains("straight"))
            return  "^  ";
        return "";
    }

    private String  getDistanceStr(double distance){
        if(distance > 1000)
            return " " + formatAmount(distance/1000) + " km";
        else return " " + distance + " m";
    }

    @Override
    public void onStart() {
        super.onStart();
        navigationView.onStart();
    }

    @Override
    public void onResume() {
        super.onResume();
        navigationView.onResume();
    }

    @Override
    public void onLowMemory() {
        super.onLowMemory();
        navigationView.onLowMemory();
    }

    @Override
    public void onBackPressed() {
        if (!navigationView.onBackPressed()) {
            super.onBackPressed();
        }
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        navigationView.onSaveInstanceState(outState);
        super.onSaveInstanceState(outState);
    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        navigationView.onRestoreInstanceState(savedInstanceState);
    }

    @Override
    public void onPause() {
        super.onPause();
        navigationView.onPause();
    }

    @Override
    public void onStop() {
        super.onStop();
        navigationView.onStop();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        navigationView.onDestroy();
    }

    public static String formatAmount(Double str){
        BigDecimal bd = new BigDecimal(str);
        bd = bd.setScale(2, BigDecimal.ROUND_HALF_UP);
        return bd.toString();
    }
}
导入android.support.v7.app.app活动;
导入android.os.Bundle;
导入android.util.Log;
导入android.view.view;
导入android.widget.ImageView;
导入android.widget.TextView;
导入android.widget.Toast;
导入com.mapbox.api.directions.v5.models.BannerText;
导入com.mapbox.api.directions.v5.models.DirectionsRoute;
导入com.mapbox.api.directions.v5.models.LegStep;
导入com.mapbox.services.android.navigation.ui.v5.NavigationViewOptions;
导入com.mapbox.services.android.navigation.ui.v5.OnNavigationReadyCallback;
导入com.mapbox.services.android.navigation.ui.v5.instruction.InstructionLoader;
导入com.mapbox.services.android.navigation.v5.milestone.banner构建里程碑;
导入com.mapbox.services.android.navigation.v5.milestone.milestone;
导入com.mapbox.services.android.navigation.v5.MilestoneEventListener;
导入com.mapbox.services.android.navigation.v5.routeprogress.routeprogress;
导入java.math.BigDecimal;
导入java.util.List;
公共类导航活动扩展AppCompativeActivity实现MilestoneEventListener、OnNavigationReadyCallback{
私有文本视图myBanner;
ImageView下一个,上一个;
列出步骤;
TextView tv_步骤;
int currentStepIndex=0;
DirectionsRoute currentRoute=null;
com.mapbox.services.android.navigation.ui.v5.NavigationView导航视图;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u导航);
navigationView=findViewById(R.id.navigationView);
myBanner=findViewById(R.id.dummyBanner);
tv_步骤=findviewbyd(R.id.tv_步骤);
next=findViewById(R.id.iv\U next);
previous=findViewById(R.id.iv_previous);
navigationView.onCreate(savedInstanceState);
navigationView.initialize(这个);
试一试{
currentRoute=(DirectionRoute)getIntent().getSerializableExtra(“路由”);
如果(currentRoute!=null){
步骤=currentRoute.legs().get(0.steps();
if(steps.size()>0){
设置();
}
}
}捕获(例外e){}
}
私有无效设置(){
加载文本(0);
next.setOnClickListener((视图v)->{
如果(currentStepIndex{
如果(currentStepIndex>0)
loadText(--currentStepIndex);
});
}
私有void加载文本(int索引){
BannerText BannerText=steps.get(index.bannerInstructions().get(0.primary());
指令加载程序加载程序=新的指令加载程序(电视步,bannerText);
loader.loadInstruction();
String text=tv_step.getText().toString();
字符串修饰符=bannerText.modifier();
字符串DirectionRow=GetDirectionRow(文本,修饰符);
如果(!directionRow.equals(“”)
tv_step.setText(directionarow+text);
tv_step.append(“+getdistconsers(steps.get(index.distance()));
Log.d(“调试修饰符”,bannerText.toJson());
}
@凌驾
public void onNavigationReady(布尔值正在运行){
DirectionsRoute DirectionsRoute=(DirectionsRoute)getIntent().getSerializableExtra(“路由”);
NavigationViewOptions=NavigationViewOptions.builder()
.方向路线(方向路线)
.shouldSimulatorOute(false)
.milestoneEventListener(本)
.build();
导航视图。开始导航(选项);
}
@凌驾
公共void onMilestoneEvent(RouteProgress RouteProgress、字符串指令、里程碑){
试一试{
if(横幅施工里程碑的里程碑实例){
BannerText primaryInstruction=((BannerInstructionMilestone)里程碑)。getBannerInstructions().primary();
primaryInstruction.text();
指令加载程序加载程序=新指令加载程序(myBanner,Primary指令);
loader.loadInstruction();
字符串text=myBanner.getText().toString();
字符串修饰符=primaryInstruction.modifier();
字符串DirectionRow=GetDirectionRow(文本,修饰符);
如果(!directionRow.equals(“”)
myBanner.setText(directionArrow+text);
双距离=routeProgress.currentLegProgress().currentStep().distance();
字符串distconsers=getdistconsers(距离);
字符串milestoneString=myBanner.getText().toString()+distconsers;
}
}捕获(例外e){
e、 printStackTrace();
}
}
私有字符串GetDirectionRow(字符串文本,字符串修饰符){
Log.e(“调试”,文本+“”+修饰符);
if(text.contains(“right”)| |修饰符.contains(“right”))
返回“>”;
else if(text.contains(“left”)| |修饰符.contains(“left”))
返回“<”;
else if(text.contains(“直线”)| |修饰符.contains(“直线”))
返回“^”;
返回“”;
}
私有字符串GetDistSector(双距离){
如果(距离>1000)
返回“+”行数(距离/1000)+“公里”;
否则返回“+距离+米”;
}
@凌驾
P
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:mapbox="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context="talha.niazi.hudlitenav.MainActivity"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="match_parent"
        android:id="@+id/dummyBanner"
        android:background="@color/design_default_color_primary"
        android:textColor="@color/mapboxWhite"
        android:padding="10dp"
        android:layout_height="wrap_content" />
    <RelativeLayout
        android:layout_width="match_parent"
        android:background="@color/button_red"
        android:id="@+id/ll_nav"
        android:padding="15dp"
        android:layout_height="wrap_content">
        <ImageView
            android:layout_width="30sp"
            android:tint="@color/white_color"
            android:id="@+id/iv_previous"
            mapbox:srcCompat="@drawable/previous"
            android:layout_height="30sp" />
        <TextView
            android:layout_width="wrap_content"
            android:textColor="@color/white_color"
            android:layout_marginStart="10sp"
            android:textStyle="bold"
            android:layout_marginEnd="10sp"
            android:layout_centerVertical="true"
            android:id="@+id/tv_step"
            android:layout_centerHorizontal="true"
            android:layout_height="wrap_content" />
        <ImageView
            android:layout_width="30sp"
            android:layout_alignParentEnd="true"
            android:id="@+id/iv_next"
            android:tint="@color/white_color"
            mapbox:srcCompat="@drawable/next"
            android:layout_height="30sp" />
    </RelativeLayout>

    <com.mapbox.services.android.navigation.ui.v5.NavigationView
        android:id="@+id/navigationView"
        android:layout_below="@id/ll_nav"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</RelativeLayout>
super.onCreate(savedInstanceState)
setTheme(R.style.Theme_AppCompat_Light_NoActionBar);
<com.mapbox.services.android.navigation.ui.v5.NavigationView
    android:id="@+id/navigationView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:navigationDarkTheme="@style/CustomNavigationView"
    app:navigationLightTheme="@style/CustomNavigationView"
    app:navigationViewMapStyle="mapbox://styles/StyleURL"/>
implementation 'com.mapbox.mapboxsdk:mapbox-android-navigation-ui:0.23.0'
maven { url 'https://mapbox.bintray.com/mapbox' }
 <androidx.constraintlayout.widget.ConstraintLayout
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    tools:context="NavigationViewFragment">

    <com.mapbox.navigation.ui.NavigationView
        android:id="@+id/navigationView"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintBottom_toBottomOf="parent" />


</androidx.constraintlayout.widget.ConstraintLayout>
 class NavigationViewFragment : Fragment(), OnNavigationReadyCallback, NavigationListener {

    private lateinit var navigationView: NavigationView
    var directionsRoute: DirectionsRoute? = null

     override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                          savedInstanceState: Bundle?): View? {
       .....
     }

     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        navigationView = view.findViewById(R.id.navigationView) as NavigationView
        navigationView.onCreate(savedInstanceState)
        val initialPosition = CameraPosition.Builder()
            .target(LatLng(originPoint.longitude(), originPoint.latitude()))
            .zoom(18.0)
            .build()
        navigationView.initialize(this, initialPosition)
     }

    override fun onNavigationReady(isRunning: Boolean) {
        val origin = Point.fromLngLat(originPoint.longitude() , originPoint.latitude())
        val destination = Point.fromLngLat(destinationPoint.longitude(), destinationPoint.latitude())
        calculateRoute(origin, destination)
    }

    override fun onCancelNavigation() {
         // Do something 
    }

    override fun onNavigationFinished() {
       // Do something 
    }

    override fun onNavigationRunning() {
        // Do something 
    }

    private fun calculateRoute(origin: Point , destination: Point) {
        NavigationRoute.builder(this.context)
              .accessToken(Mapbox.getAccessToken()!!)
              .origin(origin)
              .destination(destination)
              .build()
              .getRoute( object : Callback<DirectionsResponse> { //import retrofit2.Callback

                // Send request to Direction API
                override fun onFailure(call: Call<DirectionsResponse>? , t: Throwable?) { 
                }

                override fun onResponse(call: Call<DirectionsResponse>? ,
                                        response: Response<DirectionsResponse>?) {
                    if (response?.body() == null || response.body()?.routes()?.size!! < 1) {
                        return
                    }
                    directionsRoute = response.body()!!.routes()[0]
                    startNavigation()
                }
            })
    }

    private fun startNavigation() {
        if (directionsRoute == null) return
        val options = NavigationViewOptions.builder()
              .directionsRoute(directionsRoute)
              .shouldSimulateRoute(true)
              .navigationListener(this)
              .build()

        // start camera zooms to the beginning of the route
        navigationView.startCamera(directionsRoute)
        navigationView.startNavigation(options)
    }
}