[Программирование, Разработка под Android, Kotlin] Меняем стандартный диалог сбоя приложения в Android на собственный экран (перевод)
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Как вместо стандартного диалогового окна о сбое использовать собственный экран с сообщением об ошибке
Будущих учащихся на курсе "Android Developer. Basic" приглашаем посетить открытый вебинар на тему "Приложение под Android на Kotlin за 1,5 часа"
А пока делимся традиционным полезным переводом.
Не знаю, как вам, но мне бывает очень стыдно, когда я передаю свое приложение на проверку тестировщику или клиенту и в приложении возникает сбой. Это весьма неприятный момент.«Живи так, как будто ты умрешь завтра. Учись так, как будто ты будешь жить вечно».
Мне не нравится стандартное диалоговое окно, которое отображается при сбое приложения. Поэтому я нашел интересную библиотеку, которая позволяет отображать собственный экран с сообщением об ошибке вместо стандартного диалогового окна.Давайте разберемся, как это сделать.Что нам потребуется?
- Kotlin
- Android Studio
- Та самая библиотека.
После создания нового проекта добавьте в файл build.gradle(:app) следующую зависимость:
implementation 'cat.ereza:customactivityoncrash:2.3.0'
Создадим макет собственного экрана сбоя. Например, такой:
Макет собственного экрана сбояЭту картинку, изображающую сбой, я скачал отсюда.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.material.textview.MaterialTextView
android:id="@+id/errorText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="30dp"
android:fontFamily="sans-serif"
android:text="@string/ouch_something_went_wrong"
android:textAppearance="@style/TextAppearance.AppCompat.Large"
android:textStyle="bold" />
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/ic_error_img" />
<com.google.android.material.button.MaterialButton
android:id="@+id/restartApp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="50dp"
android:text="Restart App"
android:textAllCaps="false" />
</RelativeLayout>
Как стать успешным разработчиком для AndroidСледуйте этому плану, если хотите стать профессиональным разработчиком для Androidmedium.comДавайте добавим код, который отслеживает событие сбоя и отображает собственный экран сбоя вместо стандартного диалогового окна Android.
package com.example.customerrorscreen
import android.os.Bundle
import android.view.View
import androidx.appcompat.app.AppCompatActivity
import cat.ereza.customactivityoncrash.CustomActivityOnCrash
import kotlinx.android.synthetic.main.activity_error.*
class ErrorActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_error)
/** you can log the reason of crash by adding this line of code
* CustomActivityOnCrash.getStackTraceFromIntent(intent)
*/
//getting crashing intent
val config = CustomActivityOnCrash.getConfigFromIntent(intent)
/**
* If config is null or not getting an intent simply finish the app
*/
if (config == null) {
finish()
return
}
if (config.isShowRestartButton && config.restartActivityClass != null) {
restartApp.text = "Restart App"
restartApp.setOnClickListener {
CustomActivityOnCrash.restartApplication(
this,
config
)
}
} else {
restartApp.text = "Close App"
restartApp.setOnClickListener {
CustomActivityOnCrash.closeApplication(
this,
config
)
}
}
}
}
Нужно создать класс приложения, который будет зарегистрирован в манифесте Android с целью глобальной регистрации библиотеки обработки сбоев в приложении.
package com.example.customerrorscreen
import android.app.Application
import cat.ereza.customactivityoncrash.config.CaocConfig
/**
* Created by Mustufa on 04/11/2020.
* Email : mustufaayub82@gmail.com
*/
class MyApp : Application() {
override fun onCreate() {
super.onCreate()
CaocConfig.Builder.create()
.trackActivities(true)
.errorActivity(ErrorActivity::class.java)
.apply()
}
}
Добавим этот класс в файл AndroidManifest.xml, используя атрибут name.
AndroidManifest.xmlТеперь перейдем к файлу MainActivity.kt и поэкспериментируем с нашей новой возможностью. Мы должны вызвать сбой в приложении, чтобы увидеть наш экран сбоя. Я добавлю код, вызывающий сбой приложения, в метод onCreate.
var array = mutableListOf<String>()
array[0] = "Hello"
findViewById<TextView>(R.id.textView).text = array[1]
При выполнении этого кода будет сгенерировано исключение IndexOutOfBoundException и в приложении возникнет сбой.Запустим приложение.
Исходный код можно скачать отсюда.
Узнать подробнее о курсе "Android Developer. Basic".
Записаться на открытый урок на тему "Приложение под Android на Kotlin за 1,5 часа".
===========
Источник:
habr.com
===========
===========
Автор оригинала: Mustufa Ansari
===========Похожие новости:
- [Информационная безопасность, Тестирование IT-систем, Разработка под Windows] Как работают эксплойты по повышению привилегий в ОС Windows
- [Программирование, Функциональное программирование] Векторные языки — параллельный мир
- [Разработка веб-сайтов, JavaScript, Программирование] Роутинг и рендеринг страниц на стороне клиента с помощью History API и динамического импорта
- [Программирование, Java, Анализ и проектирование систем] Микросервисная авторизация для чайников для чайников
- [Настройка Linux, Сетевые технологии, Программирование микроконтроллеров] Делаем из ENC28J60 внешнюю USB сетевую карту
- [Программирование, ERP-системы, Управление разработкой, Управление персоналом, Читальный зал] Пузырь, соломинка и лапоть. Что происходит с программистами 1С
- [Программирование, Карьера в IT-индустрии] One way ticket, или как переехать в другую страну по работе: истории разработчиков
- [C++, Разработка робототехники, Программирование микроконтроллеров, DIY или Сделай сам] ESP32 в окружении VSCode
- [Программирование, Java] Ещё больше строковых оптимизаций
- [Информационная безопасность, Реверс-инжиниринг] CTF-соревнования 2020 для «белых хакеров». Старт регистрации участников
Теги для поиска: #_programmirovanie (Программирование), #_razrabotka_pod_android (Разработка под Android), #_kotlin, #_android_development, #_kotlin, #_android_studio, #_blog_kompanii_otus._onlajnobrazovanie (
Блог компании OTUS. Онлайн-образование
), #_programmirovanie (
Программирование
), #_razrabotka_pod_android (
Разработка под Android
), #_kotlin
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 16:53
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Как вместо стандартного диалогового окна о сбое использовать собственный экран с сообщением об ошибке Будущих учащихся на курсе "Android Developer. Basic" приглашаем посетить открытый вебинар на тему "Приложение под Android на Kotlin за 1,5 часа"
А пока делимся традиционным полезным переводом. Не знаю, как вам, но мне бывает очень стыдно, когда я передаю свое приложение на проверку тестировщику или клиенту и в приложении возникает сбой. Это весьма неприятный момент.«Живи так, как будто ты умрешь завтра. Учись так, как будто ты будешь жить вечно». Мне не нравится стандартное диалоговое окно, которое отображается при сбое приложения. Поэтому я нашел интересную библиотеку, которая позволяет отображать собственный экран с сообщением об ошибке вместо стандартного диалогового окна.Давайте разберемся, как это сделать.Что нам потребуется?
implementation 'cat.ereza:customactivityoncrash:2.3.0'
Макет собственного экрана сбояЭту картинку, изображающую сбой, я скачал отсюда. <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"> <com.google.android.material.textview.MaterialTextView android:id="@+id/errorText" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_marginTop="30dp" android:fontFamily="sans-serif" android:text="@string/ouch_something_went_wrong" android:textAppearance="@style/TextAppearance.AppCompat.Large" android:textStyle="bold" /> <androidx.appcompat.widget.AppCompatImageView android:layout_width="match_parent" android:layout_height="match_parent" android:src="@drawable/ic_error_img" /> <com.google.android.material.button.MaterialButton android:id="@+id/restartApp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:layout_marginBottom="50dp" android:text="Restart App" android:textAllCaps="false" /> </RelativeLayout> package com.example.customerrorscreen
import android.os.Bundle import android.view.View import androidx.appcompat.app.AppCompatActivity import cat.ereza.customactivityoncrash.CustomActivityOnCrash import kotlinx.android.synthetic.main.activity_error.* class ErrorActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_error) /** you can log the reason of crash by adding this line of code * CustomActivityOnCrash.getStackTraceFromIntent(intent) */ //getting crashing intent val config = CustomActivityOnCrash.getConfigFromIntent(intent) /** * If config is null or not getting an intent simply finish the app */ if (config == null) { finish() return } if (config.isShowRestartButton && config.restartActivityClass != null) { restartApp.text = "Restart App" restartApp.setOnClickListener { CustomActivityOnCrash.restartApplication( this, config ) } } else { restartApp.text = "Close App" restartApp.setOnClickListener { CustomActivityOnCrash.closeApplication( this, config ) } } } } package com.example.customerrorscreen
import android.app.Application import cat.ereza.customactivityoncrash.config.CaocConfig /** * Created by Mustufa on 04/11/2020. * Email : mustufaayub82@gmail.com */ class MyApp : Application() { override fun onCreate() { super.onCreate() CaocConfig.Builder.create() .trackActivities(true) .errorActivity(ErrorActivity::class.java) .apply() } } AndroidManifest.xmlТеперь перейдем к файлу MainActivity.kt и поэкспериментируем с нашей новой возможностью. Мы должны вызвать сбой в приложении, чтобы увидеть наш экран сбоя. Я добавлю код, вызывающий сбой приложения, в метод onCreate. var array = mutableListOf<String>()
array[0] = "Hello" findViewById<TextView>(R.id.textView).text = array[1] Исходный код можно скачать отсюда. Узнать подробнее о курсе "Android Developer. Basic".
Записаться на открытый урок на тему "Приложение под Android на Kotlin за 1,5 часа". =========== Источник: habr.com =========== =========== Автор оригинала: Mustufa Ansari ===========Похожие новости:
Блог компании OTUS. Онлайн-образование ), #_programmirovanie ( Программирование ), #_razrabotka_pod_android ( Разработка под Android ), #_kotlin |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 16:53
Часовой пояс: UTC + 5