Java 当我按下后退按钮时,片段中的MapBox也存在permissionsManager.requestLocationPermissions问题(此)

Java 当我按下后退按钮时,片段中的MapBox也存在permissionsManager.requestLocationPermissions问题(此),java,android,fragment,mapbox,fragment-oncreateview,Java,Android,Fragment,Mapbox,Fragment Oncreateview,我是Java和Android工作室的新手。我目前正试图将MapBox地图放入一个片段中,并获取我的设备位置。它起了一定的作用,在一个片段中启动的地图也找到了我的位置,但一旦我按下设备上的“后退”按钮,地图就会崩溃,应用程序虽然没有关闭,但变得没有响应。我得到的logcat消息是“2020-05-18 12:02:46.392 28026-28125/com.example.projektas5 W/libEGL:EGLNativeWindowType 0x7d2c6f4010”。此外,由于per

我是Java和Android工作室的新手。我目前正试图将MapBox地图放入一个片段中,并获取我的设备位置。它起了一定的作用,在一个片段中启动的地图也找到了我的位置,但一旦我按下设备上的“后退”按钮,地图就会崩溃,应用程序虽然没有关闭,但变得没有响应。我得到的logcat消息是“2020-05-18 12:02:46.392 28026-28125/com.example.projektas5 W/libEGL:EGLNativeWindowType 0x7d2c6f4010”。此外,由于permissionsManager.requestLocationPermissions(此)仅适用于活动,因此我只能通过在电话设置中允许权限来获取设备位置。如果有人能帮助我,我将不胜感激。我的代码如下:

public class SecondPage extends Fragment implements OnMapReadyCallback, LocationEngineListener, PermissionsListener {


    View root;
    MapView mapView;
    private MapboxMap map;
    private PermissionsManager permissionsManager;
    private LocationEngine locationEngine;
    private LocationLayerPlugin locationLayerPlugin;
    private Location originLocation;



    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        Mapbox.getInstance(getContext(),getString(R.string.access_token));
        root = inflater.inflate(R.layout.second_page, container, false);
        mapView =(MapView) (root).findViewById(R.id.mapView);
        mapView.onCreate(savedInstanceState);
        mapView.getMapAsync(this);

        return  root;
    }

    @Override
    public void onMapReady(MapboxMap mapboxMap) {
        map = mapboxMap;
        enableLocation();
    }


    private void enableLocation() {
        if (PermissionsManager.areLocationPermissionsGranted(getContext())) {
            initializeLocationEngine();
            initializeLocationLayer();
        } else {
            permissionsManager = new PermissionsManager(this);
//            permissionsManager.requestLocationPermissions(this);
        }
    }

    private void initializeLocationEngine() {
        locationEngine = new LocationEngineProvider(getContext()).obtainBestLocationEngineAvailable();
        locationEngine.setPriority(LocationEnginePriority.HIGH_ACCURACY);
        locationEngine.activate();

        Location lastLocation = locationEngine.getLastLocation();
        if (lastLocation != null) {
            originLocation = lastLocation;
            setCameraPosition(lastLocation);
        } else {
            locationEngine.addLocationEngineListener(this);
        }
    }

    private void initializeLocationLayer() {
        locationLayerPlugin = new LocationLayerPlugin(mapView, map, locationEngine);
        locationLayerPlugin.setLocationLayerEnabled(true);
        locationLayerPlugin.setCameraMode(CameraMode.TRACKING);
        locationLayerPlugin.setRenderMode(RenderMode.NORMAL);
    }

    private void setCameraPosition(Location location) {
        map.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(location.getLatitude(),
                location.getLongitude()), 13.0));
    }

    @Override
    @SuppressWarnings("MissingPermission")
    public void onConnected() {
        locationEngine.requestLocationUpdates();
    }

    @Override
    public void onLocationChanged(Location location) {
        if (location != null) {
            originLocation = location;
            setCameraPosition(location);
        }
    }

    @Override
    public void onExplanationNeeded(List<String> permissionsToExplain) {
        //Present toast or dialog. Need to do this on my own
    }

    @Override
    public void onPermissionResult(boolean granted) {
        if (granted) {
            enableLocation();
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        permissionsManager.onRequestPermissionsResult(requestCode, permissions,grantResults);
    }



    @Override
    public void onStart() {
        super.onStart();
        if (locationEngine != null) {
            locationEngine.removeLocationUpdates();

        }
        if (locationLayerPlugin != null) {
            locationLayerPlugin.onStart();
        }
        mapView.onStart();
    }

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

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

    @Override
    public void onStop() {
        super.onStop();
        if (locationEngine != null) {
            locationEngine.removeLocationUpdates();
        }
        if (locationLayerPlugin != null) {
            locationLayerPlugin.onStop();
        }
        mapView.onStop();
    }

    @Override
    public void onSaveInstanceState(@NonNull Bundle outState) {
        super.onSaveInstanceState(outState);
        mapView.onSaveInstanceState(outState);
    }

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

    @Override
    public void onDestroy() {
        super.onDestroy();
        if (locationEngine != null) {
            locationEngine.deactivate();
        }
        mapView.onDestroy();
    }
}
公共类SecondPage扩展了MapreadyCallback、LocationEngineListener、PermissionsListener上的片段实现{
视图根;
地图视图;
私人地图;
私人许可证管理人许可证管理人;
私人定位引擎定位引擎;
私人位置layerplugin位置layerplugin;
私密区位;原始区位;
@凌驾
创建时的公共void(@Nullable Bundle savedInstanceState){
super.onCreate(savedInstanceState);
}
@可空
@凌驾
创建视图时的公共视图(LayoutFlater充气机、@Nullable ViewGroup容器、@Nullable Bundle savedInstanceState){
getInstance(getContext(),getString(R.string.access_token));
根=充气机。充气(R.layout.second_页,容器,假);
mapView=(mapView)(根).findViewById(R.id.mapView);
onCreate(savedInstanceState);
getMapAsync(这个);
返回根;
}
@凌驾
mapready上的公共无效(MapboxMap MapboxMap){
map=mapboxMap;
enableLocation();
}
私有void enableLocation(){
if(PermissionsManager.areLocationPermissionsGranted(getContext())){
初始化ElocationEngine();
初始化ElocationLayer();
}否则{
permissionsManager=新的permissionsManager(此);
//permissionsManager.requestLocationPermissions(此);
}
}
private void initializeLocationEngine(){
locationEngine=新的LocationEngineProvider(getContext())。获取BestLocationEngineAvailable();
locationEngine.setPriority(LocationEnginePriority.HIGH_精度);
locationEngine.activate();
Location lastLocation=locationEngine.getLastLocation();
if(lastLocation!=null){
originLocation=最后一个位置;
setCameraPosition(最后位置);
}否则{
locationEngine.addLocationEngineListener(此);
}
}
private void initializeLocationLayer(){
locationLayerPlugin=新的locationLayerPlugin(地图视图、地图、位置引擎);
locationLayerPlugin.setLocationLayerEnabled(true);
locationLayerPlugin.setCameraMode(CameraMode.TRACKING);
locationLayerPlugin.setRenderMode(RenderMode.NORMAL);
}
私有void setCameraPosition(位置){
map.animateCamera(CameraUpdateFactory.newLatLngZoom)(新LatLng(location.getLatitude()),
location.getLongitude()),13.0);
}
@凌驾
@SuppressWarnings(“MissingPermission”)
未连接的公共空间(){
locationEngine.requestLocationUpdates();
}
@凌驾
已更改位置上的公共无效(位置){
如果(位置!=null){
原始位置=位置;
设置摄像机位置(位置);
}
}
@凌驾
public void OneExplanationRequired(列出许可证解释){
//展示祝酒词或对话。需要我自己来做吗
}
@凌驾
public void onPermissionResult(已授予布尔值){
如果(授予){
enableLocation();
}
}
@凌驾
public void onRequestPermissionsResult(int-requestCode,@NonNull-String[]permissions,@NonNull-int[]grantResults){
permissionsManager.onRequestPermissionsResult(请求代码、权限、grantResults);
}
@凌驾
public void onStart(){
super.onStart();
如果(locationEngine!=null){
locationEngine.RemovelocationUpdate();
}
if(locationLayerPlugin!=null){
locationLayerPlugin.onStart();
}
onStart();
}
@凌驾
恢复时公开作废(){
super.onResume();
onResume();
}
@凌驾
公共无效暂停(){
super.onPause();
onPause();
}
@凌驾
公共void onStop(){
super.onStop();
如果(locationEngine!=null){
locationEngine.RemovelocationUpdate();
}
if(locationLayerPlugin!=null){
locationLayerPlugin.onStop();
}
mapView.onStop();
}
@凌驾
SAVEInstanceState上的公共无效(@NonNull Bundle outState){
super.onSaveInstanceState(超出状态);
mapView.onSaveInstanceState(outState);
}
@凌驾
public void onLowMemory(){
super.onLowMemory();
onLowMemory();
}
@凌驾
公共空间{
super.ondestory();
如果(locationEngine!=null){
locationEngine.deactivate();
}
mapView.onDestroy();
}
}

使用地图SDK
SupportMapFragment
演示如何在
SupportMapFragment
中使用Mapbox Maps SDK的
LocationComponent

从那个例子中吸取教训?如果您仍然遇到车祸,请发布更多日志信息。搜索任何包含
Mbgl
的内容,或搜索
致命的
“2020-05-18 12:02:46.392 28026-28125/com.example.projektas5 W/libEGL:EGLNativeWindowType 0x7d2c6f401”消息不存在
    @Override
    public void onDestroyView() {
        super.onDestroyView();
        if (locationEngine != null) {
            locationEngine.deactivate();
        }
//        mapView.onDestroyView();
    }