Как использовать Acra reportDialogClass

Я задал вопрос о том, чтобы разрешить пользователю добавлять собственный комментарий при сбое здесь и узнал, что в ACRA 4.6 есть механизм именно для этого. Я не смог найти никакой документации или примеров того, как это использовать, поэтому я попытался разобраться сам, но мне не удалось добиться желаемого поведения. Я попытался, например, добавить это в аннотацию:

reportDialogClass = CustomReportDialog.class

и это то, что я написал, чтобы посмотреть, смогу ли я показать диалог:

import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;

import org.acra.BaseCrashReportDialog;

public class CustomReportDialog extends BaseCrashReportDialog {
    @Override
    protected void onCreate(Bundle savedInstanceState) {

        new AlertDialog.Builder(getApplicationContext()).setMessage("yo").setPositiveButton("pos", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {

            }
        }).create().show();
    }
}

В общем, BaseCrashReportDialog.class кажется мне несколько запутанным, потому что я ожидал, что он предоставит какую-то основу для всплывающего диалогового окна, но он просто расширяется из Activity, поэтому я попытался показать свой собственный AlertDialog. Кто-нибудь понял, как правильно реализовать эту новую функцию? Спасибо

РЕДАКТИРОВАТЬ По запросу Уильяма:

@ReportsCrashes(
        formUri = BuildConfig.SERVER_DOMAIN,
        mode = ReportingInteractionMode.TOAST,
        resToastText = R.string.crash_toast_text,
        disableSSLCertValidation = true,
        additionalSharedPreferences = {BuildConfig.APPLICATION_ID},
        excludeMatchingSharedPreferencesKeys = {CommonUtils.PROPERTY_REG_ID, CommonUtils.PREFS_SESSION_TOKEN},
        reportDialogClass = CustomReportDialog.class
        )

person ethan123    schedule 07.03.2015    source источник


Ответы (1)


Обратите внимание на комментарий в BaseCrashReportDialog, в котором говорится, что «[подклассы] должны вызывать super.onCreate() в начале метода». Вам нужно сделать это.

Вы также должны сделать что-то в своем onClick, например, позвонить BaseCrashReportDialog.sendCrash()

Взгляните на CrashReportDialog.java для отправной точки.

Вам также необходимо настроить mode = ReportingInteractionMode.DIALOG

person William    schedule 07.03.2015
comment
Эй, Уильям, спасибо за это. Я испробовал множество способов реализовать это и даже дошел до того, что полностью скопировал и вставил содержимое CrashReportDialog.java в свой собственный класс. Я добавил launchMode=singleInstance в свой манифест в соответствии с комментарием вверху. Суть в том, что ничего не работает. Вы сами успешно реализовали это и отображали диалоговое окно при сбое? Я пропустил что-то важное, чтобы заставить эту работу работать? - person ethan123; 08.03.2015
comment
Да, я успешно реализовал это в своем собственном папке. Как и тот, кто его представил. Если вы скопировали CrashReportDialog и он не работает, значит, что-то не так с вашей конфигурацией. Когда вы говорите, что это не работает, что вы имеете в виду? - person William; 09.03.2015
comment
Да, я уверен, что делаю что-то не так, и я действительно хочу понять это :). Итак, я имею в виду, что мое ожидаемое поведение заключается в том, что при сбое приложения перед отправкой сбоя появляется диалоговое окно. Что на самом деле происходит, когда я пытаюсь это сделать, так это то, что отправляется ошибка, и диалоговое окно никогда не отображается. Правильно ли я настраиваю аннотацию acra? Есть еще идеи, что это может быть? - person ethan123; 09.03.2015
comment
Показать всю конфигурацию ACRA - person William; 09.03.2015
comment
Решение состоит в настройке mode=DIALOG - см. измененный ответ. - person William; 10.03.2015