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

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

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

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

13.06.2016, 15:35. Просмотров 180. Ответов 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 Нужен ли NDK начинающему разработчику?
Отправить SMS сообщение Android
Начинающему разработчику Android
Android Как поймать событие нажатия пальцами на экран?
Исключение SocketException Android
Отправить файл на сервер Android
В одном фрагменте запустить интент - во втором поймать его Android
Исключение NetworkOnMainThreadException Android
Android Почему Google map долго грузит детали карты в определенных координатах?
Поймать UncaughtExceptions и запустить ErrorActivity Android
Как поймать смену фокуса EditText? Android
Как заработать разработчику игр для Android Android

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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();
        }
Yandex
Объявления
14.06.2016, 19:52     Поймать необработанное исключение и предложить пользователю отправить детали ошибки разработчику
Ответ Создать тему
Опции темы

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