[Программирование, Разработка под Android, Kotlin] Меняем стандартный диалог сбоя приложения в Android на собственный экран (перевод)
Автор
Сообщение
news_bot ®
Стаж: 6 лет 4 месяца
Сообщений: 27286
Как вместо стандартного диалогового окна о сбое использовать собственный экран с сообщением об ошибке
Будущих учащихся на курсе "Android Developer. Basic" приглашаем посетить открытый вебинар на тему "Приложение под Android на Kotlin за 1,5 часа"
А пока делимся традиционным полезным переводом.
![Клик для увеличения](https://linkme.ufanet.ru/box/200x100/81188240ee8a59da928d816a9d2b6729.png)
Не знаю, как вам, но мне бывает очень стыдно, когда я передаю свое приложение на проверку тестировщику или клиенту и в приложении возникает сбой. Это весьма неприятный момент.«Живи так, как будто ты умрешь завтра. Учись так, как будто ты будешь жить вечно».![Клик для увеличения](https://linkme.ufanet.ru/box/200x100/3e0db4d7ef09b6bc8c2deaeeab5ae9fc.png)
Мне не нравится стандартное диалоговое окно, которое отображается при сбое приложения. Поэтому я нашел интересную библиотеку, которая позволяет отображать собственный экран с сообщением об ошибке вместо стандартного диалогового окна.Давайте разберемся, как это сделать.Что нам потребуется?
- Kotlin
- Android Studio
- Та самая библиотека.
После создания нового проекта добавьте в файл build.gradle(:app) следующую зависимость:
implementation 'cat.ereza:customactivityoncrash:2.3.0'
Создадим макет собственного экрана сбоя. Например, такой:![Клик для увеличения](https://linkme.ufanet.ru/box/200x100/0c5f05977960a5fa6df28a2c2ccfb302.png)
Макет собственного экрана сбояЭту картинку, изображающую сбой, я скачал отсюда.
<?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.![Клик для увеличения](https://linkme.ufanet.ru/box/200x100/6f72845a2dd774f6048574c33ba5b20d.png)
AndroidManifest.xmlТеперь перейдем к файлу MainActivity.kt и поэкспериментируем с нашей новой возможностью. Мы должны вызвать сбой в приложении, чтобы увидеть наш экран сбоя. Я добавлю код, вызывающий сбой приложения, в метод onCreate.
var array = mutableListOf<String>()
array[0] = "Hello"
findViewById<TextView>(R.id.textView).text = array[1]
При выполнении этого кода будет сгенерировано исключение IndexOutOfBoundException и в приложении возникнет сбой.Запустим приложение.![Клик для увеличения](https://linkme.ufanet.ru/box/200x100/f387ab847956ea32bf691d58885ab2b4.gif)
Исходный код можно скачать отсюда.
Узнать подробнее о курсе "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
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 28-Июн 11:08
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 4 месяца |
|
Как вместо стандартного диалогового окна о сбое использовать собственный экран с сообщением об ошибке Будущих учащихся на курсе "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 |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 28-Июн 11:08
Часовой пояс: UTC + 5