MyLocationOverlay.enableCompass () перестала работать в Google Map API 7 и 8

Арг .. Это расстраивает:

Внезапно (март 2012 г.) MyLocationOverlay.enableCompass не работает. Он нормально работает с Google API 14, но оставляет весь экран черным в Google API 7 и Google API 8.

Я хотел бы сохранить функциональность компаса, но, поскольку это не обязательно, я просто оставлю его отключенным. Я думаю, это может быть результатом установки Android SDK Tools 16 поверх SDK Tools 15 ... Может быть, это проблема с настройкой моего эмулятора или Eclipse? У меня есть сильное предчувствие, что эта проблема не возникнет на реальном устройстве. Следующим шагом с моей стороны будет попробовать ее на другой установке Eclipse / Android SDK, но это на другой день ...

Спасибо за помощь.

Вот мой пример кода: Сначала onResume, я не включаю компас ... Все работает нормально. Во-вторых, onResume после onPause [нажмите кнопку «Домой», затем снова войдите в приложение], появляется черный экран. В чем дело?

@Override
public void onCreate(Bundle state)
{
    super.onCreate(state);
    setContentView(MAP_LAYOUT);
    MapView mv = (MapView) findViewById(MAP_VIEW);
    mv.setBuiltInZoomControls(true);
    List<Overlay> mapOverlays = mv.getOverlays();
    Context c = getApplicationContext();
    mLocation = new MyLocationOverlay(c,mv);
    mapOverlays.add(mLocation);
}

@Override
public void onPause() {
    super.onPause();
    mLocation.disableCompass();
    mLocation.disableMyLocation();
    mCompassOn = true;
}

boolean mCompassOn = false;

@Override
public void onResume() {
    super.onResume();
    if( mCompassOn ) mLocation.enableCompass();
    mLocation.enableMyLocation();
}

Мой манифест включает:

... ‹использует-разрешение android: name =" android.permission.INTERNET "/>‹ использует-разрешение android: name = "android.permission.ACCESS_COARSE_LOCATION" /> ‹использует-разрешение android: name =" android.permission. ACCESS_FINE_LOCATION "/>‹ application android: icon = "@ drawable / ic_launcher" android: label = "@ string / app_name"> ‹использует-библиотеку android: name =" com.google.android.maps "/> ...‹ / приложение> ...

И мой макет включает в себя, чтобы соответствовать правильному хранилищу ключей отладки:

<com.google.android.maps.MapView
    android:id="@+id/superMapView"
    android:layout_width="fill_parent"
    android:layout_height="0dp"
    android:layout_weight="3"
    android:clickable="true"
    android:apiKey="..." />

Платформа Eclipse

Версия: 3.7.0.v20110530-9gF7UHNFFt4cwE-pkZDJ7oz-mj4OSEIlu9SEv0f

Идентификатор сборки: I20110613-1736

Набор инструментов для разработки под Android

Версия: 16.0.1.v201112150204-238534

Вопрос похож на

http://groups.google.com/group/android-developers/browse_thread/thread/8928ffa71ef35f8a

но я бы хотел и дальше пользоваться компасом ...


person JJ Stiff    schedule 18.03.2012    source источник


Ответы (1)


Может быть, это проблема с настройкой моего эмулятора или Eclipse?

Эмулятор никогда не эмулировал компас. Компас просто не появлялся. То же самое происходит со мной в эмуляторе Android 2.1 с этим примером проекта, даже после нажатия HOME и возврата к действию.

Вы можете попробовать немного коснуться черного экрана. Если вы получаете диалоговое окно ANR, проблема в том, что что-то связывает основной поток приложения.

У меня есть сильное предчувствие, что эта проблема не возникнет на реальном устройстве.

Это говорит о том, что у вас нет устройства Android, иначе вы бы уже попробовали это. Вы должны получить его, так как вы никогда не должны полагаться на эмулятор для вещей, которые слишком близки к оборудованию (например, GPS, датчик магнитного потока для компаса).

Также замените все вхождения getApplicationContext() на this. Никогда не используйте getApplicationContext() для работы с графическим интерфейсом.

person CommonsWare    schedule 18.03.2012
comment
Хорошо. Да, у меня действительно нет доступа к Android-устройству, правда. Однако я был приятно удивлен, увидев, что мое приложение работает достаточно хорошо, даже намного быстрее, чем мой эмулятор, на устройствах моих друзей. Спасибо за понимание getApplicationContext (), я приму к сведению. - person JJ Stiff; 25.03.2012