¿ Cómo implemento este código para android 6.0? – java android

Pregunta:


Tengo en un Fragment implementado el Google API y FUNCIONA. Pero funciona en mis 3 móviles que son jellybean, kitkat y lollipop. El de mi amigo que es 6.0 no funciona… aparece el mapa de GOOGLE API, sí, pero no aparecen las coordenadas, como si no hubiera puesto nada, sólo el mapa…

¿ Por qué ? ¿ Dónde falla ?

Aclaración: Si pensáis decirme que intente con MapFragment se me detiene la aplicación, así que esa no es la solución, con MapFragment en vez de SupportMapFragment no me funciona en ninguna situación, y lo implementado aquí bajo funciona:

public class Map_fragment extends Fragment implements OnMapReadyCallback {

@Override

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

    View v = inflater.inflate(R.layout.activity_map, container, false);

    SupportMapFragment mapFragment = (SupportMapFragment) this.getChildFragmentManager().findFragmentById(R.id.mapid);
    mapFragment.getMapAsync(this);

    return v;
}

@Override
public void onMapReady(GoogleMap map) {
    LatLng RudeBoys = new LatLng(39.4561165, -0.3545661);
    LatLng Malaga = new LatLng(36.6981483, -4.4513236);
    LatLng Melilla = new LatLng(35.2896931, -2.9427164);


    if (Build.VERSION.SDK_INT >= 23 &&
            ContextCompat.checkSelfPermission(getActivity(), android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED &&
            ContextCompat.checkSelfPermission(getActivity(), android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        return;
    }

    map.setMyLocationEnabled(true);
    map.moveCamera(CameraUpdateFactory.newLatLngZoom(RudeBoys, 5)); // ZOOM AL EMPEZAR EL GOOGLE MAP

    // ¡¡ FOR EACH LOCATION I CAN USE DIFFERENT ICON AND DESCRIPTION , RAFA!!
    map.addMarker(new MarkerOptions()
            .icon(BitmapDescriptorFactory.fromResource(R.drawable.box24))
            .title("Rude-Boys")
            .snippet("Tienda principal")
            .position(RudeBoys));

    map.addMarker(new MarkerOptions()
            .icon(BitmapDescriptorFactory.fromResource(R.drawable.mapfinal))
            .title("CLUB DE LA LUCHA")
            .snippet("Málaga")
            .position(Malaga));

    map.addMarker(new MarkerOptions()
            .icon(BitmapDescriptorFactory.fromResource(R.drawable.mapfinal))
            .title("ON FITNESS SHOP")
            .snippet("Melilla")
            .position(Melilla));    

}

}

<fragment
    android:id="@+id/mapid"
    android:name="com.google.android.gms.maps.SupportMapFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

Preguntado por: Rf Mvs

sioesi

desde Android 6.0 en adelante, los permisos de las aplicaciones no se dan cuando se instala, si no, cuando el usuario la ocupa. Para acceder a las coordenadas del telefono es necesario ver los permisos necesarios. Podrias ver con esto Documentacion:

Solicitar permisos de tiempo de ejecución
Android 6.0 (Marshmallow) presenta un nuevo modelo para administrar permisos, el cual simplifica el proceso de instalación y actualización de aplicaciones para los usuarios. Si tu aplicación tiene como destino la API nivel 23 o una posterior, puedes usar el nuevo modelo de permisos.

if (Build.VERSION.SDK_INT >= 23) {
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
        //todo bien
    } else {
        ActivityCompat.requestPermissions(
            this, new Strin g[] { android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION }, 1337);
    }
}

EDICION

if (Build.VERSION.SDK_INT >= 23 &&
        ContextCompat.checkSelfPermission(getActivity(), android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED &&
        ContextCompat.checkSelfPermission(getActivity(), android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
    return;
}

Si es mayor a 23 y no tienes los permisos tu simplemente no cargas el mapa. Tienes que solicitar el permiso, verificar que se los dio y seguir tu codigo.

Fuente

Add a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *