Android地图-在权限更改问题上绘制自定义标记(Android 6.0)

Android地图-在权限更改问题上绘制自定义标记(Android 6.0),android,dictionary,marker,Android,Dictionary,Marker,我在应用程序中使用谷歌地图v2,我面临着一个非常奇怪的问题 在地图上,我正在画自定义标记——一个不同颜色的圆形物体,数字表示某种信息 问题是,对于安卓6.0,在取消位置权限并返回应用程序后,我的地图标记将使用默认图标绘制。在我重新启动应用程序之前,重新授予权限不会改变问题 有趣的是,如果在启动应用程序时禁用了位置权限,那么绘制自定义标记就可以了。只有当应用程序正在工作,然后我切换位置权限(关闭或打开),我的标记才会更改为默认值 有人知道如何解决这个问题吗?我想在设置中切换位置权限(这与在地图上绘

我在应用程序中使用谷歌地图v2,我面临着一个非常奇怪的问题

在地图上,我正在画自定义标记——一个不同颜色的圆形物体,数字表示某种信息

问题是,对于安卓6.0,在取消位置权限并返回应用程序后,我的地图标记将使用默认图标绘制。在我重新启动应用程序之前,重新授予权限不会改变问题

有趣的是,如果在启动应用程序时禁用了位置权限,那么绘制自定义标记就可以了。只有当应用程序正在工作,然后我切换位置权限(关闭或打开),我的标记才会更改为默认值

有人知道如何解决这个问题吗?我想在设置中切换位置权限(这与在地图上绘制标记无关),并且仍然绘制自定义标记而不是默认标记

编辑:只是澄清一下-我在返回应用程序时正在重新绘制标记。问题是它们不再是我的自定义图标,而是默认的谷歌标记图标。守则:

public void addBay(final String mapMarkerId, final Position position, String status) {
    if(mapService.getMap() != null) {
        final BitmapDescriptor icon = getIconForStatus(status);

        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Marker newMarker = addMarkerToGoogleMap(position, icon);
                markers.put(mapMarkerId, newMarker);
            }
        });
    }
}

private Marker addMarkerToGoogleMap(Position position, BitmapDescriptor icon) {
    return mapService.getMap().addMarker(new MarkerOptions()
            .position(new LatLng(position.latitude, position.longitude))
            .anchor(0.5f, 0.5f)
            .icon(icon));
}

public BitmapDescriptor getIconForStatus(String status) {

    switch (status) {
        case BayDto.STATUS_FREE:
            return bayStatusFreeIcon;
        case BayDto.STATUS_OCCUPIED:
            return bayStatusOccupiedIcon;
        case BayDto.STATUS_UNKNOWN:
            return bayStatusUnknownIcon;
        default:
            return null;
    }
}

public void initIcons() {
    bayStatusFreeIcon = BitmapDescriptorFactory.fromBitmap(drawableUtils.createSingleMarkerFromImage(R.drawable.area_above_9_places));
    bayStatusOccupiedIcon = BitmapDescriptorFactory.fromBitmap(drawableUtils.createSingleMarkerFromImage(R.drawable.status_occupied));
    bayStatusUnknownIcon = BitmapDescriptorFactory.fromBitmap(drawableUtils.createSingleMarkerFromImage(R.drawable.status_unknown));
}

如果要添加自定义标记,请将图像(标记图像)复制到可绘制文件夹中

检查下面的代码

 mMap.addMarker(new MarkerOptions().position(latitude,longitude).icon(BitmapDescriptorFactory.fromResource(R.drawable.markerImage)));//markerImage is my marker image name in darwable folder.

当您在允许权限后返回应用程序时。 在onResume()方法中创建标记对象或设置标记颜色

onResume()->在返回应用程序时调用,因此您需要更改此方法


我希望我能像你期望的那样工作

问题确实在于兑现那些图标

问题是,在权限更改时,根据以下内容:

那个么,当应用程序打开时,若权限被撤销,会发生什么呢?我已经尝试过了,发现应用程序的进程突然终止了。应用程序内部的一切都只是简单地停止了(因为它已经被终止了…)。不管怎样,这听起来对我来说是有意义的,因为如果操作系统允许应用程序继续它的进程,它可能会召唤弗雷迪来做我的噩梦。我是说比现在更糟糕的噩梦

问题是我的应用程序并没有崩溃或自动关闭。它仍然是活跃的,我可以回到它。但我认为它以某种方式重新加载了自己。因此,在我通过调用initIcons()兑现这些图标的活动中,我决定将smth放在如下位置:

public void onCreate(IMapActivityView mapView, boolean isFirstRun) {
    this.view = mapView;

    if(androidBuildSdkReader.getDeviceSdkVersion() >= 23)
        markerProvider.initIcons();
    else
        initIconsIfIsFirstRun(isFirstRun);
}
而不是简单地:

public void onCreate(IMapActivityView mapView, boolean isFirstRun) {
    this.view = mapView;

    initIconsIfIsFirstRun(isFirstRun);
}

我知道如何画记号笔。这不是重点。我正在将我的自定义图标传递给addMarker,但如果我在应用程序运行时切换权限,我已经添加了代码,它将绘制默认值。我只是将图标兑换成现金,这样我就不必在绘制大量标记(这对应用程序性能有好处)然后将标记添加到地图时创建它们。我真的不认为这是我的解决方案的问题。我开发地图应用已经有很长一段时间了,这个方法一直很好,直到我遇到应用程序运行时更改权限的问题。也许我不够精确。这正是我正在做的。我正在重新绘制标记,我正在缩放更改时重新绘制它们,但在我切换应用程序工作时的权限后,绘制结果并不像预期的那样-不再使用我的自定义图标,而是使用默认的android标记图标。