iT邦幫忙

2022 iThome 鐵人賽

DAY 5
0
Mobile Development

從開發瀏覽器 APP 學習 Android 實戰技巧,並搭上 Jetpack Compose 的列車系列 第 5

[Day5] 從開發瀏覽器 APP 學習實戰技巧 -- 儲存 epub 文件的流程改善

  • 分享至 

  • xImage
  •  

去年寫了兩篇如何在瀏覽網頁時,把當前的網頁儲存成 epub 檔案的說明。

電子書閱讀器上的瀏覽器 [Day15] 網頁匯出成 epub 檔案 (I)

介紹 epublib ,以及初步地將網頁存入 epub 檔案

電子書閱讀器上的瀏覽器 [Day16] 網頁匯出成 epub 檔案 (II)

進一步說明怎麼儲存網頁中的圖片到 epub 中

礙於 Android 每次升版對於檔案的存取方式都不斷在(亂無章法地)改進,到目前為止,最通用的開啟手機上檔案方式是:利用 Intent.ACTION_CREATE_DOCUMENT 叫起系統的 file expolorer default APP,從那很不好用的介面中選取想要的檔案,或新增一個檔案。

而 EinkBro 從一開始提供這功能時,就是採取了這方式。這作法在新增 epub 時,沒有什麼太大的問題,使用者只需要在對的目錄下輸入想要的檔案名稱就好, EinkBro 就會收到系統傳來的 content uri。

如果使用者是想要將網頁儲存到既有的 epub 檔案中時,這方法就顯得很麻煩。開啟檔案選取時,有可能當下的目錄不是使用者想要的,也有可能當下的目錄有一堆 . 開頭的目錄或檔案,顯示在畫面最上方,必須要經過不斷捲動,或是在各個目錄間移動,才能找到想要的那個 epub 檔案。偶一為之還好;如果每天都有想要儲存的文章時,就會煩到想要放棄這功能,乾脆再另存一個新檔比較快。

解法的關鍵

我自己在使用了好長一段時間後,終於受不了了,想來看看有沒有辦法改善這個流程。後來終於找到方法了,關鍵在於:新建 epub 檔案時,那個 content uri 的存取權限一般來說只可以使用到下次手機重開。一旦使用者重開手機,就只能再利用 file picker 選擇想要的檔案。這問題 Android 官方給出了解法:

https://developer.android.com/training/data-storage/shared/documents-files#persist-permissions

如果有想要拿到的 content uri,在未來不論何時都可以再次讀寫的話,可以加上下面的片段:
https://ithelp.ithome.com.tw/upload/images/20220916/20140260B3xJaA50o1.png

這麼一來,這個 uri 就可以保留在自己的 APP 中,之後利用它來讀取檔案的內容或是將新的資料寫入進去。

EinkBro 中的實作說明

我把這段程式碼加在 openBook() 中,並且在 save epub 時,將這個檔案的 content uri 存到 sharedpreference 中 (是的,不是寫到資料庫,因為我懶得再開一個 table)。然後稍微調整了一下儲存 epub 的對話框,將原本的兩個選項(但都是開啟 file picker):

Save to existing epub
New an epub
改為

Select Saved Epub
new Epub or from picker
選項 1 不再跳出系統難用的 file picker ,而是列出 EinkBro APP 曾經儲存過的 epub 檔案,讓使用者可以直接選擇!

雖然這只是一個很不起眼的流程小改善,但對於我的閱讀方式來說,卻有很大很大的幫助!也希望這個功能的改善,會讓大家更快速地儲存 epub 。

程式碼片段

加入獲取權限的 commit

將 epub 檔案的 uri 存入 sharedpreference,並呈現為列表

示範影片

Yes


上一篇
[Day4] 從開發瀏覽器 APP 學習實戰技巧 -- 雙開:同時顯示兩個網頁
下一篇
[Day6] 從開發瀏覽器 APP 學習實戰技巧 -- 如何使用自訂字型瀏覽網頁
系列文
從開發瀏覽器 APP 學習 Android 實戰技巧,並搭上 Jetpack Compose 的列車31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言