Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
AlexV1
-2 / 0 / 0
Регистрация: 05.04.2016
Сообщений: 33
#1

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

13.06.2016, 15:35. Просмотров 192. Ответов 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); // Нет так нет, убиваем процесс
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.06.2016, 15:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Поймать необработанное исключение и предложить пользователю отправить детали ошибки разработчику (Программирование Android):

Поймать исключение - C++ Qt
Почему-то не ловятся исключения: try { return a.exec(); } catch (...) { qDebug() &lt;&lt; &quot;Exception!&quot;; ...

Поймать исключение в глобальном объекте - C++
Есть глобальный объект, конструктор которого может кинуть исключение типа std::exception. Разумеется, на этом приключения программы и...

.NET 4.x Как поймать исключение из другого потока? - C#
Пишу программу на C#. Суть программы - написать класс который анализирует файл и в случае не корректности выбрасывает исключение, анализ...

Необработанное исключение - C++
Здравствуйте. При запуске программы возникает проблема: &quot;Необработанное исключение по адресу 0x00035E17 в ConsoleApplication1.exe:...

Необработанное исключение - Visual C++
Здравствуйте! Приложение работает, на некоторых компах стабильно, на некоторых при запуске сообщение об ошибке &quot;Обнаружена ошибка....

Необработанное исключение - C++
Доброго времени суток. Ошибка: Необработанное исключение типа &quot;System.Resources.MissingManifestResourceException&quot; в mscorlib.dll ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
AlexV1
-2 / 0 / 0
Регистрация: 05.04.2016
Сообщений: 33
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();
        }
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.06.2016, 19:52
Привет! Вот еще темы с ответами:

Необработанное исключение - C++
есть программный код на поиск самой длинной последовательности чисел в файле с последующим её копированием в другой файл #include...

Необработанное исключение - C++
Здравствуйте! Задачу см. во вложениях. Мой код: заголовочный файл: #include &lt;string&gt; #include &lt;iostream&gt; using...

Необработанное исключение - C++
Всем привет! Совсем недавно начал писать на C++. Делаю курсовую работу. Программа моделирует процесс и полученные значения записывает...

Необработанное исключение - Assembler
В ассемблере новичок, интересует такой вопрос, Написанная на асме функция вызывается нормально, но при завершении работы visual'ки...


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

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

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