Ошибка google maps api v2

Я делаю приложение, которое содержит карту, используя google maps api v2, что делает карту, состоит в том, чтобы показывать тебе твое расположение и точку, самую близкую к тебе, ища в серии точек заблаговременно сохраняемые.

Проблема состоит в том, что я попытался в различных устройствах, и оно функционирует верно во всех, кроме в android 6.0, в которых просто загружается карта, не указывая ни на расположения ни ничто и не дает никакого типа ошибки.

Здесь - код.

public class TiendaCercana extends Activity {
 protected void onCreate(Bundle savedInstanceState) {
    eventMarkerMap = new HashMap<Marker, EventInfo>();
    super.onCreate(savedInstanceState);
    setContentView(R.layout.mapa_layout);

    mapFragment = new MainMapFragment();

    FragmentTransaction ft = getFragmentManager().beginTransaction();

    ft.add(R.id.map, mapFragment);

    ft.commit();
}

  @Override

protected void onStart() {
    super.onStart();
    setUpEventSpots();
}

 private void setUpEventSpots() {

    if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {

        return;
    }
    mapFragment.getMap().setMyLocationEnabled(true);

    myLocation = getLastKnownLocation();
}

 LocationManager mLocationManager;


private Location getLastKnownLocation() {
    mLocationManager = (LocationManager) getApplicationContext().getSystemService(LOCATION_SERVICE);
    List<String> providers = mLocationManager.getProviders(true);
    Location bestLocation = null;
    for (String provider : providers) {
        if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {

            if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                    android.Manifest.permission.ACCESS_FINE_LOCATION)) {

            } else {
                ActivityCompat.requestPermissions(this,
                        new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION},
                        MY_PERMISSIONS_REQUEST_READ_CONTACTS);
            }
        }
        Location l = mLocationManager.getLastKnownLocation(provider);
        if (l == null) {
            continue;
        }
        if (bestLocation == null || l.getAccuracy() < bestLocation.getAccuracy()) {
            bestLocation = l;
        }
    }
    return bestLocation;
 }
}

И это fragment карты

import com.google.android.gms.maps.MapFragment;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;


public class MainMapFragment extends MapFragment {

public Marker placeMarker(EventInfo eventInfo) {

    Marker m  = getMap().addMarker(new MarkerOptions()
            .position(eventInfo.getLatLong())
            .title(eventInfo.getNomCom()));
    return m;
}

}
2
задан 12.03.2017, 14:48
2 ответа

Назови mГ©todo в onStart() siguente mГ©ttodo:

 private void setUpEventSpots() {

    if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {

        return;
    }
    mapFragment.getMap().setMyLocationEnabled(true);

    myLocation = getLastKnownLocation();
}

это mГ©todo тот, который проверяет разрешения в Android 6.0 и включает карту в случае, если будут иметься казначеи:

mapFragment.getMap().setMyLocationEnabled(true);
2
ответ дан 24.11.2019, 14:38
  • 1
    Perd и # 243; n, я себе был должен и # 243; забывать, скопировав c и # 243; я говорю, он называется в onStart (). – Alex B 06.04.2016, 11:04
  • 2
    Ok, тогда уверив, что имеется пламя сейчас: mapFragment.getMap () .setMyLocationEnabled (true); – Jorgesys♦ 08.02.2017, 03:05

Попроси разрешения в onStart, так как этот называется, чтобы выполнять перед getLastKnownLocation, из-за которого код:

mapFragment.getMap().setMyLocationEnabled(true);

myLocation = getLastKnownLocation();

когда бы то ни было этот ejecuntando, из-за которого, если у тебя нет разрешений, ты делаешь return.

эх осуществляет onRequestPermissionsResult, для в случае, если пользователь, если я принял разрешение, ты включишь расположение с:

mapFragment.getMap().setMyLocationEnabled(true);
myLocation = getLastKnownLocation();
0
ответ дан 24.11.2019, 14:38