Book app android studio

Пишем читалку электронных книг на Android с помощью FBReader SDK

В настоящее время наиболее популярными и удобными способами чтения являются электронные книги. Их можно взять с собой куда угодно, они экономят бумагу, отображение текста в них можно настраивать так, как удобно читателю. По этим причинам появилось множество форматов электронных книг, основные из которых это EPUB, FB2 и MOBI. Всем известные DOC и TXT тоже являются форматами электронных книг, однако их возможности по сравнению с вышеуказанными весьма ограничены. У каждого из форматов есть свои преимущества, однако наиболее часто используемыми являются EPUB и FB2, причём второй популярен только у нас в России.

Одной из особенностей этих форматов является то, что для них нужна специальная программа, которая может работать с конкретным форматом. Поэтому в App Store или Google Play можно найти большое количество разнообразных читалок под все известные форматы. В этой статье мы попробуем написать свою собственную читалку электронных книг. Для этой цели мы воспользуемся специальной SDK от разработчиков FBReader, который доступен по следующей ссылке.

В сентябре этого года FBReader выпустили свой собственный SDK для Android, позволяющий создавать свои собственные читалки на его основе. FBReader SDK обладает большим функционалом, который включает в себя следующие возможности:

  • Открытие любых файлов электронных книг (ePub, fb2, mobi, и так далее)
  • Чтение метаданных из файла книги
  • Особенности движка FBReader
  • Возможность менять стиль текста книги

Кроме того, библиотека предоставляет и различные дополнительные возможности для реализации в приложениях, такие как:

  • Выделение текста
  • Закладки
  • Поиск по тексту
  • Оглавление
  • Дополнительная навигация по тексту
  • Поддержка сносок и гиперссылок
  • Настройка яркости

Отдельно стоит отметить, что, хоть FBReader SDK и можно скачать с сайта бесплатно, после встраивания в приложение она будет работать в демо-режиме, который имеет полный функционал, но показывает только несколько первых страниц книги. Для того, чтобы получить полную версию библиотеки, нужно купить её на сайте разработчика и, следуя инструкциям, получить специальный ключ SDK, который затем добавляется в приложение.

В этой статье мы рассмотрим, как на основе FBReader SDK создать свою собственную читалку электронных книг и посмотрим её возможности.

Начнём с добавления SDK в свой проект. Для этого создадим новый проект с пустой активностью. В качестве минимального API укажем API 16.

В файле build.gradle модуля проекта добавим в блок allprojects ссылку для скачивания нужных нам библиотек.

Затем в файле build.gradle модуля приложения добавим зависимости с библиотеками в блок dependencies.

Как вы можете заметить, здесь также присутствует библиотека «com.googlecode.json-simple:json-simple:1.1». Она пригодится чуть позже для работы с JSON-файлами.

Библиотек, входящих в FBReader SDK довольно много, однако они разделены так, чтобы можно было подключать только те, которые нужны для конкретного случая.

В этом же файле в блок android добавим следующие строки, которые должны обеспечить успешную сборку проекта.

На сайте SDK разработчики также предоставляют исходный код различных компонентов, которые упрощают реализацию интерфейса. Скачаем его и добавим в проект. Для этого перенесём оттуда папку fbreader в папку своего проекта. После этого в файле settings.gradle пропишем эту папку и пути до нужных модулей.

Теперь добавим зависимости с ними в файле build.gradle модуля приложения.

Когда IDE пересоберёт проект, мы увидим добавленные модули в списке слева.

На этом подключение SDK завершено и можно приступать к непосредственно созданию приложения. В конце статьи у нас должна получиться простая читалка с двумя активностями, одна из которых будет отображать список электронных книг на устройстве, а вторая открывать выбранный файл.

Начнём с разметки. Для MainActivity добавим на экран компонент RecyclerView, который будет содержать собственно список файлов. Для этого добавим в файл layout/activity_main.xml следующий код.

Читайте также:  Рейтинг sip клиентов android

Теперь инициализируем этот объект в коде активности. Откроем файл MainActivity.java и добавим следующий код.

Для того, чтобы работать с файлами, хранящимися на устройстве, нам потребуется запрашивать специальное разрешение. Добавим в манифест приложения AndroidManifest.xml следующие разрешения.

Начиная с API 23 это разрешение необходимо запрашивать у пользователя в рантайме. Для этого при запуске приложения будем проверять версию Android на устройстве и при необходимости отправлять пользователю запрос на получение разрешения.

Получить результат запроса можно, переопределив метод активности onRequestPermissionResult(). Если разрешение приложению было предоставлено, продолжаем дальнейшую работу.

В методе generateList() мы будем искать нужные файлы на устройстве и отображать их в списке приложения. Для этого создадим AsyncTask, который будет выполнять всю работу в отдельном потоке и возвращать готовый список с найденными файлами. Добавим следующий код в MainActivity.

Полученный результат нужно отобразить. Для этого нам понадобится адаптер для RecyclerView и модель, в которой будут храниться данные элементов списка. Создадим простой класс BookFile, в котором мы будем хранить имя файла и путь до него на устройстве.

Теперь нам нужен адаптер, в который мы будем загружать список. Добавим разметку для элемента списка, для этого создадим файл layout/file_list_item.xml и добавим в него следующий код.

Теперь создадим класс BooksAdapter, который будет наследовать от RecyclerView.Adapter<>. В нём нам нужно инициализировать элементы списка, загружая в них пути и имена файлов электронных книг. Таким образом, код адаптера будет выглядеть следующим образом.

Кроме того, между активностью и адаптером пробрасывается интерфейс, с помощью которого мы будем передавать в активность файл, который пользователь хочет открыть.

Вернёмся в главную активность. В методе generateList() мы запускаем AsyncTask и привязываем к нему слушатель, который должен вызывать метод onTaskCompleted() при завершении работы. В этом методе нам нужно составить список, отсортировать его по имени и передать в адаптер. Добавим сюда следующий код:

Теперь, запустив приложение, мы можем увидеть список файлов электронных книг, которые есть на устройстве.

Однако нам нужно этот файл открыть и прочитать, в этом нам и поможет FBReader SDK. Создадим новую активность, назовём её ReaderActivity. Теперь из скачанного исходного кода нам понадобится несколько классов. Откроем в папке с исходным кодом samples/extensions/src/main и скопируем себе в проект целиком папку res, за исключением res/layout/main.xml, и из java/org/fbreader/sample/extensions скопируем все классы, кроме MainActivity.java. Эти классы содержат готовые компоненты, которые помогут нам в создании читалки, при желании их можно модифицировать в соответствии с потребностями.

Теперь откроем layout/reader_activity.xml и добавим в него следующий код разметки.

TextWidgetExt является обёрткой класса библиотеки TextWidget, этот класс является основным и именно он отображает содержимое книги.

Инициализируем теперь эти объекты в коде активности ReaderActivity.java.

Мы должны получить от главной активности путь до файла, который пользователь хочет открыть. Для этого мы будем передавать интент из одной активности в другую, содержащий нужный путь. Вернёмся в MainActivity.java и добавим код создания интента в метод onBookOpen() интерфейса адаптера.

После этого отправленный интент нам нужен получить в ReaderActivity.java при старте активности. Добавим в onCreate() запись пути файла.

Полученный путь мы передаём в метод setBook() у объекта TextWidgetExt. После этого он должен нам вернуть объект Book, который можно получить с помощью метода TextWidgetExt controller(). Если объект не будет равен null, значит загрузка содержимого прошла успешно и можно показать книгу пользователю.

Теперь, если запустить приложение, мы уже можем видеть содержимое книги, пролистывать его и работать с ним.

Однако это не весь функционал, на который способна данная SDK. Ранее мы добавляли файлы ресурсов: различные разметки, иконки и меню. Добавим меню в наше приложение, для этого в ReaderActivity.java переопределим метод onCreateOptionsMenu() и добавим в него следующий код.

Также переопределим методы onPrepareOptionsMenu() и onOptionsItemSelected() для работы с этим меню.

Таким образом мы добавим в читалку меню, позволяющее нам:

  • Менять размер текста
  • Менять стиль текста
  • Искать по тексту
  • Открывать оглавление
Читайте также:  Топ телефонов андроид 2021 года

По поводу оглавления стоит сказать отдельно. В коде, взятом из библиотеки, оглавление представлено в виде отдельной активности, мы её скопировали ранее, но не добавили в манифест. Поэтому откроем файл манифеста AndroidManifest.xml и зарегистрируем в нём новую активность.

Теперь при открытии оглавления через меню у нас будет запускаться новая активность, содержащая в себе оглавление открытой книги. Стоит отметить, что не все книги содержат такое оглавление, поэтому в таких случаях кнопка меню будет неактивна.

При выборе главы обратно в ReaderActivity будет возвращаться номер страницы, на которую нужно перейти. Чтобы получить этот результат, в ReaderActivity.java мы переопределим метод onActivityResult(), в который добавим следующий код.

Как можно увидеть, библиотека предоставляет разработчикам весь свой функционал, единственным ограничением бесплатной версии здесь является то, что она открывает только первые несколько страниц книги, о чём говорится при открытии книги.

Если вы купили ключ SDK и хотите добавить его в своё приложение, вам понадобится в файле build.gradle модуля приложения добавить в блоке buildTypes следующий код.

Не смотря на то, что движок FBReader достаточно мощный, а также учитывая графические ресурсы, добавляемые вместе с библиотекой, итоговый APK получился небольшого размера, что говорит о хорошей оптимизации библиотеки.

Итак, с помощью FBReader SDK и небольшого количества кода мы смогли создать простую читалку для электронных книг. Можно уже оставить как есть, либо продолжить модифицировать, изменяя интерфейс и дизайн так, как нужно разработчику. Пока что SDK есть только на Android, но разработчики планируют к концу года выпустить версию и для iOS.

Пишем читалку электронных книг на Android с помощью FBReader SDK : 4 комментария

В начале написали бы что SDK платная )) причем оочень дорогая ))

Так писали же, что платная.

А есть альтернативы?

SDK не только платная, но еще и очень дорогая. 1000 долларов за лицензию на одно приложение это уж слишком.

Источник

Android в„ў Notes for Professionals book


Androidв„ў Notes for Professionals book

If you found this free Androidв„ў book useful,
then please share it ❤😊

Chapters

  1. Getting started with Android
  2. Android Studio
  3. Instant Run in Android Studio
  4. TextView
  5. AutoCompleteTextView
  6. Autosizing TextViews
  7. ListView
  8. Layouts
  9. ConstraintLayout
  10. TextInputLayout
  11. CoordinatorLayout and Behaviors
  12. TabLayout
  13. ViewPager
  14. CardView
  15. NavigationView
  16. RecyclerView
  17. RecyclerView Decorations
  18. RecyclerView onClickListeners
  19. RecyclerView and LayoutManagers
  20. Pagination in RecyclerView
  21. ImageView
  22. VideoView
  23. Optimized VideoView
  24. WebView
  25. SearchView
  26. BottomNavigationView
  27. Canvas drawing using SurfaceView
  28. Creating Custom Views
  29. Getting Calculated View Dimensions
  30. Adding a FuseView to an Android Project
  31. Supporting Screens With Different Resolutions, Sizes
  32. ViewFlipper
  33. Design Patterns
  34. Activity
  35. Activity Recognition
  36. Split Screen / Multi-Screen Activities
  37. Material Design
  38. Resources
  39. Data Binding Library
  40. SharedPreferences
  41. Intent
  42. Fragments
  43. Button
  44. Emulator
  45. Service
  46. The Manifest File
  47. Gradle for Android
  48. FileIO with Android
  49. FileProvider
  50. Storing Files in Internal & External Storage
  51. Zip file in android
  52. Unzip File in Android
  53. Camera and Gallery
  54. Camera 2 API
  55. Fingerprint API in android
  56. Bluetooth and Bluetooth LE API
  57. Runtime Permissions in API-23 +
  58. Android Places API
  59. Android NDK
  60. DayNight Theme (AppCompat v23.2 / API 14+)
  61. Glide
  62. Dialog
  63. Enhancing Alert Dialogs
  64. Animated AlertDialog Box
  65. GreenDAO
  66. Tools Attributes
  67. Formatting Strings
  68. SpannableString
  69. Notifications
  70. AlarmManager
  71. Handler
  72. BroadcastReceiver
  73. UI Lifecycle
  74. HttpURLConnection
  75. Callback URL
  76. Snackbar
  77. Widgets
  78. Toast
  79. Create Singleton Class for Toast Message
  80. Interfaces
  81. Animators
  82. Location
  83. Theme, Style, Attribute
  84. MediaPlayer
  85. Android Sound and Media
  86. MediaSession
  87. MediaStore
  88. Multidex and the Dex Method Limit
  89. Data Synchronization with Sync Adapter
  90. PorterDuff Mode
  91. Menu
  92. Picasso
  93. RoboGuice
  94. ACRA
  95. Parcelable
  96. Retrofit2
  97. ButterKnife
  98. Volley
  99. Date and Time Pickers
  100. Localized Date/Time in Android
  101. Time Utils
  102. In-app Billing
  103. FloatingActionButton
  104. Touch Events
  105. Handling touch and motion events
  106. Detect Shake Event in Android
  107. Hardware Button Events/Intents (PTT, LWP, etc.)
  108. GreenRobot EventBus
  109. Otto Event Bus
  110. Vibration
  111. ContentProvider
  112. Dagger 2
  113. Realm
  114. Android Versions
  115. Wi-Fi Connections
  116. SensorManager
  117. ProgressBar
  118. Custom Fonts
  119. Getting system font names and using the fonts
  120. Text to Speech(TTS)
  121. Spinner
  122. Data Encryption/Decryption
  123. OkHttp
  124. Handling Deep Links
  125. Crash Reporting Tools
  126. Check Internet Connectivity
  127. Creating your own libraries for Android applications
  128. Device Display Metrics
  129. Building Backwards Compatible Apps
  130. Loader
  131. ProGuard — Obfuscating and Shrinking your code
  132. Typedef Annotations: @IntDef, @StringDef
  133. Capturing Screenshots
  134. MVP Architecture
  135. Orientation Changes
  136. Xposed
  137. PackageManager
  138. Gesture Detection
  139. Doze Mode
  140. Colors
  141. Keyboard
  142. RenderScript
  143. Fresco
  144. Swipe to Refresh
  145. Creating Splash screen
  146. IntentService
  147. Implicit Intents
  148. Publish to Play Store
  149. Universal Image Loader
  150. Image Compression
  151. 9-Patch Images
  152. Email Validation
  153. Bottom Sheets
  154. EditText
  155. Speech to Text Conversion
  156. Installing apps with ADB
  157. Count Down Timer
  158. Barcode and QR code reading
  159. Android PayPal Gateway Integration
  160. Drawables
  161. TransitionDrawable
  162. Vector Drawables
  163. VectorDrawable and AnimatedVectorDrawable
  164. Port Mapping using Cling library in Android
  165. Creating Overlay (always-on-top) Windows
  166. ExoPlayer
  167. XMPP register login and chat simple example
  168. Android Authenticator
  169. AudioManager
  170. AudioTrack
  171. Job Scheduling
  172. Accounts and AccountManager
  173. Integrate OpenCV into Android Studio
  174. MVVM (Architecture)
  175. ORMLite in android
  176. Retrofit2 with RxJava
  177. ShortcutManager
  178. LruCache
  179. Jenkins CI setup for Android Projects
  180. fastlane
  181. Define step value (increment) for custom RangeSeekBar
  182. Getting started with OpenGL ES 2.0+
  183. Check Data Connection
  184. Java on Android
  185. Android Java Native Interface (JNI)
  186. Notification Channel Android O
  187. Robolectric
  188. Moshi
  189. Strict Mode Policy : A tool to catch the bug in the Compile Time.
  190. Internationalization and localization (I18N and L10N)
  191. Fast way to setup Retrolambda on an android project.
  192. How to use SparseArray
  193. Shared Element Transitions
  194. Android Things
  195. Library Dagger 2: Dependency Injection in Applications
  196. JCodec
  197. Formatting phone numbers with pattern.
  198. Paint
  199. What is ProGuard? What is use in Android?
  200. Create Android Custom ROMs
  201. Genymotion for android
  202. ConstraintSet
  203. CleverTap
  204. Publish a library to Maven Repositories
  205. adb shell
  206. Ping ICMP
  207. AIDL
  208. Android game development
  209. Android programming with Kotlin
  210. Android-x86 in VirtualBox
  211. Leakcanary
  212. Okio
  213. Bluetooth Low Energy
  214. Looper
  215. Annotation Processor
  216. SyncAdapter with periodically do sync of data
  217. Fastjson
  218. JSON in Android with org.json
  219. Gson
  220. Android Architecture Components
  221. Jackson
  222. Smartcard
  223. Security
  224. How to store passwords securely
  225. Secure SharedPreferences
  226. Secure SharedPreferences
  227. SQLite
  228. Accessing SQLite databases using the ContentValues class
  229. Firebase
  230. Firebase Cloud Messaging
  231. Firebase Realtime DataBase
  232. Firebase App Indexing
  233. Firebase Crash Reporting
  234. Twitter APIs
  235. Youtube-API
  236. Integrate Google Sign In
  237. Google signin integration on android
  238. Google Awareness APIs
  239. Google Maps API v2 for Android
  240. Google Drive API
  241. Displaying Google Ads
  242. AdMob
  243. Google Play Store
  244. Sign your Android App for Release
  245. TensorFlow
  246. Android Vk Sdk
  247. Project SDK versions
  248. Facebook SDK for Android
  249. Thread
  250. AsyncTask
  251. Testing UI with Espresso
  252. Writing UI tests — Android
  253. Unit testing in Android with JUnit
  254. Inter-app UI testing with UIAutomator
  255. Lint Warnings
  256. Performance Optimization
  257. Android Kernel Optimization
  258. Memory Leaks
  259. Enhancing Android Performance Using Icon Fonts
  260. Bitmap Cache
  261. Loading Bitmaps Effectively
  262. Exceptions
  263. Logging and using Logcat
  264. ADB (Android Debug Bridge)
  265. Localization with resources in Android
  266. Convert vietnamese string to english string Android
Читайте также:  Квест сибирь для андроид

Example book pages


What people are saying about this Androidв„ў Notes for Professionals book

This is amazing. I just downloaded the Android book, and it’s actually pretty good.

It’s really very awesome books for beginners. Thank you

Great buddy. Helpful for all developers! This book covers almost all topics.

Thank you so much for taking the time to make this, really appreciate it !

Awesome tutorial. Apply many techiniques for Dev Android. Thank you!

One of the best resources about Android programming I’ve ever seen and it’s totally free. Thanks!

The Androidв„ў Notes for Professionals book is compiled from Stack Overflow Documentation, the content is written by the beautiful people at Stack Overflow. Text content is released under Creative Commons BY-SA. See credits at the end of this book whom contributed to the various chapters. Images may be copyright of their respective owners unless otherwise specified

Book created for educational purposes and is not affiliated with Androidв„ў group(s), company(s) nor Stack Overflow. All trademarks belong to their respective company owners

Источник

Оцените статью