2013-06-14 2 views
0

На некоторых устройствах наше приложение разбивается с NoClassDefFoundError при запуске операции с картой.NoClassDefFoundError on MapActivity

Да, у нас есть разрешение и библиотека и все необходимые вещи для запуска MapActivity. Он отлично работает на 99,9% всех устройств (все, у которых есть службы google ...)

Однако есть 2-3 устройства, о которых я никогда не слышал (например: Prestigio - PAP4040_DUO или MID - PAD-FMD700P или rockchip AN9G2), который, как представляется, не имеет служб google и не может открывать активность карты.

Есть ли шанс обнаружить это и, возможно, показать что-то вроде «ваш телефон не поддерживает карты Google, извините»?

(Да, мы могли игнорировать тыс 2-3 устройств, но мы стараемся поддерживать все)

ответ

3

есть ли шанс обнаружить это и, возможно, показать что-то вроде «ваш телефон не поддерживает карты Google, извините «?

Если ваш MapActivity не привязан к значку запуска, возможно. Я предполагаю, что ваш NoClassDefFoundError исходит от MapActivity или что-то еще от дополнения Maps V1 SDK. В этом случае используйте Class.forName(), чтобы определить, есть ли у вас класс из Maps V1, прежде чем пытаться запустить любой MapActivity.

This sample project демонстрирует это. Значок пусковая привязан к Theme.NoDisplay деятельности, которая имеет следующие onCreate():

public void onCreate(Bundle instanceState) { 
    super.onCreate(instanceState); 

    try { 
     Class.forName("com.google.android.maps.MapActivity"); 
     startActivity(new Intent(this, NooYawk.class)); 
    } 
    catch (Exception e) { 
     Toast 
      .makeText(this, 
         "Google Maps are not available -- sorry!", 
         Toast.LENGTH_LONG) 
      .show(); 
    } 

    finish(); 
    } 

Если наш тест, чтобы увидеть, если MapActivity существует преуспевает, то можно смело начать MapActivity (здесь названный NooYawk). Если мы получим исключение, мы просто выйдем с Toast.

+0

Благодарим за быстрый ответ. Кажется законным для меня, и я скоро его приму, но: Вы знаете, как проверить это, не имея одного из тысяч устройств? У нас есть пара устройств BB10 здесь, и мы будем тестировать их на них (компилировать, загружать, тестировать), но, возможно, для других людей есть какой-либо намек? – Christoph

+1

@Christoph: используйте образ эмулятора, который не имеет API Google. – CommonsWare

+0

Протестировано в эмуляторе, отлично работает. Thx, если вы могли бы изменить catch (Exception e) { , чтобы поймать (ClassNotFoundException e), все было бы хорошо (никогда не поймать все) – Christoph

Смежные вопросы