Как получить информацию о сбое из класса ApplicationErrorReport? - PullRequest
2 голосов
/ 02 апреля 2012

Android ICS (API 14) представил класс ApplicationErrorReport со следующей информацией: CrashInfo BatteryInfo и ANRInfo.Из обзора класса кажется, что этот класс относится ко всем приложениям, установленным на устройстве, а не для отладки вашего личного приложения.Кажется, я не могу получить эту информацию (смоделированные сбои и т. Д.)

Я пробовал этот код:

ApplicationErrorReport appp = new ApplicationErrorReport();
CrashInfo test = appp.crashInfo;
Log.i(test.stackTrace);

, но я получаю, что тест null

Какполучить информацию о сбое?

1 Ответ

1 голос
/ 02 апреля 2012

В ApplicationErrorReport API указано:

ApplicationErrorReport ()
Создайте неинициализированный экземпляр ApplicationErrorReport.

Это означает, что «тип» ошибки не определен, поэтому это не отчет о сбое, и поэтому crashinfo имеет значение null.

EDIT: Я взглянул на исходный код . Вы можете создать экземпляр CrashInfo с помощью метода readFromParcel(in), где первый int в посылке - это int, соответствующий ApplicationErrorReport.TYPE_CRASH. В качестве альтернативы вы можете создать объект CrashInfo самостоятельно и назначить его для ApplicationErrorReport, но для этого снова требуется посылка, если вы хотите, чтобы данные CrashInfo были заполнены.

Я пытался найти код, где он используется, но единственное, что я смог найти, это ApplicationManagerNative (также с использованием посылок).

case HANDLE_APPLICATION_CRASH_TRANSACTION: {
        data.enforceInterface(IActivityManager.descriptor);
        IBinder app = data.readStrongBinder();
        ApplicationErrorReport.CrashInfo ci = new ApplicationErrorReport.CrashInfo(data);
        handleApplicationCrash(app, ci);
        reply.writeNoException();
        return true;
})
...