Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
AlexV1
-2 / 0 / 0
Регистрация: 05.04.2016
Сообщений: 36
#1

Поймать необработанное исключение и предложить пользователю отправить детали ошибки разработчику - Программирование Android

13.06.2016, 15:35. Просмотров 231. Ответов 1
Метки нет (Все метки)

Добрый день!

Думаю не нужно объяснять зачем это мне надо, любой разработчик поймет суть задачи.

В общем то уже почти сделал задуманное, но маловато опыта чтобы понять что не так делаю.

Сделал обертку над Application (класс назвал MyApplication), в котором назначаю обработчик необработаннхы исключений.
В моем обработчике (см.метод handleUncaughtException) я вызываю свой BugreportActivity, где написано что произошла ошибка и вопрос "Отправить текст ошибки разработчикам?", кнопки "Нет" и "Отправить".

Если юзер жмет Нет, то программа должна закрыться. Если "Отправить", то должно создаться новое письмо в почтовой программе по-умолчанию и
прописаться Кому, Тема, Тело, чтобы юзер мог убедиться что нет каких-либо личных данных и осталось только отправить.

Буду признателен вам, если подскажите почему нажав Нет окно BugreportActivity закрывается и снова открывается.
Если опять нажать Нет - тоже самое, а с 3-го раза закроется! Но при этом Android Studio зависает, приходится снимать задачу.

Реализацию постарался написать проще некуда.
Может предложите свой вариант, буду чрезмерно признателен :-)

Для реализации задуманного делаю так:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class MyApplication extends Application {
 
    @Override
    public void onCreate() {        
 
        // Setup handler for uncaught exceptions.
        Thread.setDefaultUncaughtExceptionHandler (new Thread.UncaughtExceptionHandler()
        {
            @Override
            public void uncaughtException (Thread thread, Throwable e)
            {
                handleUncaughtException (thread, e);
            }
        });
 
        super.onCreate();
    }
 
    public void handleUncaughtException (Thread thread, Throwable e)
    {
        Intent intent = new Intent();
        intent.setAction ("com.example.alexv.listdemo.SEND_ERR_TO_DEVELOPERS");
        intent.setFlags (Intent.FLAG_ACTIVITY_NEW_TASK); // required when starting from Application
        startActivity (intent);
 
        System.exit(1); // kill off the crashed app
    }
}
В манифесте прописываю фильтр интента так:

XML
1
2
3
4
5
6
7
8
9
<activity android:name=".BugreportActivity">
       android:theme="@android:style/Theme.Dialog"
       android:textAppearance="@android:style/TextAppearance.Large"
       android:windowSoftInputMode="stateHidden">
       <intent-filter>
           <action android:name="com.example.alexv.listdemo.SEND_ERR_TO_DEVELOPERS" />
           <category android:name="android.intent.category.DEFAULT" />
       </intent-filter>
</activity>
Форма с предложением отправить ошибку разработчикам:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class BugreportActivity extends Activity implements View.OnClickListener {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_bugreport);
    }
 
    public void btnSendClick(View view) {
        // Отсюда потом вызову создание письма ...
        System.exit(1); // убиваем тек.процесс, т.к. приложение разрушено и оно больше не нужно
    }
 
    public void btnNoClick(View view) {
        System.exit(1); // Нет так нет, убиваем процесс
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.06.2016, 15:35
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Поймать необработанное исключение и предложить пользователю отправить детали ошибки разработчику (Программирование Android):

Что я сделал не так?Возникло необработанное исключение по адресу 0x7434A9F2 : исключение Microsoft C++: std
//Калькулятор Intrigger #include&lt;iostream&gt; #include&lt;conio.h&gt; ...

Поймать исключение
Почему-то не ловятся исключения: try { return a.exec(); } ...

Как поймать исключение в Task?
Здраствуйте! Есть код (все лишнее соответственно убрал): try { Task t1...

Поймать исключение в глобальном объекте
Есть глобальный объект, конструктор которого может кинуть исключение типа...

Как поймать исключение в программе?
В общем, если я ловлю исключение ThreadAbortException, то надо произвести...

Необработанное исключение
Добрый день! разобравшись с предыдущими ошибками, я столкнулся с новой....

1
AlexV1
-2 / 0 / 0
Регистрация: 05.04.2016
Сообщений: 36
14.06.2016, 19:52  [ТС] #2
Тему закрываю. Нашел решение.

Кому интересно, сделал вызов моей активити через PendingIntent и заработало:

Java
1
2
3
4
5
6
7
8
9
10
11
12
Context context = MyApplication.this.getApplicationContext()
        Intent bugreportActivity = new Intent("com.example.alexv.listdemo.SEND_ERR_TO_DEVELOPERS");//this has to match your intent filter
        bugreportActivity.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        bugreportActivity.putExtra("body", report.toString());
        PendingIntent pendingIntent = PendingIntent.getActivity(context, 22, bugreportActivity, 0);
        try {
            pendingIntent.send();            
        }
        catch (PendingIntent.CanceledException ex) {
            // TODO Auto-generated catch block
            ex.printStackTrace();
        }
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.06.2016, 19:52
Привет! Вот еще темы с решениями:

Необработанное исключение
Здравствуйте. Подскажите, в чем может быть ошибка в этой строке?...

Необработанное исключение
Здравствуйте! Пишу программу для нумерации двумерного массива(т.е. собрать его...

Необработанное исключение
Необработанное исключение по адресу 0x0FDF50B9 (vcruntime140d.dll) в...

Необработанное исключение
Прога завершается с кодом ноль, но выдает такое сообщение


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru