Я использую ACRA (arca.ch) для создания автоматических отчетов об ошибках.
Я только что выпустил новую версию своего приложения с использованием Google Maps Android API v2. Я получаю сообщение об ошибке от пользователей EEEPad и Transformer Pad при попытке отобразить диалоговое окно, возвращенное GooglePlayServicesUtil.getErrorDialog. Кто-нибудь знает, почему это может произойти?
Вот соответствующий код и Logcat, как сообщает acra:
При вызове этой строки:
int resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
if(resultCode != ConnectionResult.SUCCESS)
{
//The dialog that comes back is null (probably due to the logcat message)
Dialog dialog = GooglePlayServicesUtil.getErrorDialog(resultCode, this, 69);
//So when I call the next line, the app crashes with a NullPointerException
dialog.show();
}
...
Логкат:
12-18 04:21:04.531 W/GooglePlayServicesUtil( 3977): Google Play Store signature invalid.
12-18 04:21:04.551 E/GooglePlayServicesUtil( 3977): Google Play services is invalid. Cannot recover.
Заранее благодарим за любую помощь, которую вы можете предоставить.
Обновить
Google еще не решил проблему, и я обновлю этот вопрос, как только что-нибудь услышу (см. ответ CommonsWare для ссылки на отчет об ошибке Google). В то же время, если вы столкнулись с этой проблемой и не хотите, чтобы ваше приложение зависло, вот что я сейчас делаю:
public void checkGooglePlayServicesAvailability()
{
int resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
if(resultCode != ConnectionResult.SUCCESS)
{
Dialog dialog = GooglePlayServicesUtil.getErrorDialog(resultCode, this, 69);
if(dialog != null)
{
dialog.show();
}
else
{
showOkDialogWithText(this, "Something went wrong. Please make sure that you have the Play Store installed and that you are connected to the internet. Contact developer with details if this persists.");
}
}
Log.d("GooglePlayServicesUtil Check", "Result is: " + resultCode);
}
public static void showOkDialogWithText(Context context, String messageText)
{
Builder builder = new AlertDialog.Builder(context);
builder.setMessage(messageText);
builder.setCancelable(true);
builder.setPositiveButton("OK", null);
AlertDialog dialog = builder.create();
dialog.show();
}