2021年12月23日 星期四

Andrid Custom Firebase Crashlytics 教學

最近發現後端的 api 有時候實在不穩,於是想想應該來 log 一下

所以使用 Firebase Crashlytics

而我的需求是在進到某個判斷裡就視為 exception

而不是等 crash 才來分析,所以我要防止 crash 且知道這個大量的 exception

2021年12月20日 星期一

Android Coroutine: Flow MutableSharedFlow Constructor 的用法

doc from SharedFlowImpl 

這週想要加強一下 Coroutine 方面的知識,像是 flow 跟 channel ,而 flow 看著看著就出現了 MutableSharedFlow 與 MutableStateFlow ,前者的建構子有三個參數,第一次看不懂,第二次看還是不懂XD,可憐的智商啊,花了一點時間克服障礙後得到的結果如下:

2021年12月13日 星期一

Android viewPager2 的 FragmentStateAdapter 的三個建構子

 最近想把專案的 viewPager 全都升到 viewPager2,但是發現 viewPager2 的 FragmentStateAdapter 有三個建構子,官方似乎也沒有說第三個建構子是用在什麼情況,總之,如果層級是在 activity 就傳 fragmentActivity;如果是在 fragment 就傳 fragment,如果都不是在以上情況的話就用第三個,那什麼時候你的 viewPager2 會不在 activity 或是 fragment 呢?像是在 recyclerView 的 viewHolder 裡,這個時候就再說吧~

參考:

https://stackoverflow.com/questions/66946122/what-is-the-difference-between-each-constructor-when-extending-fragmentstateadap


2021年12月4日 星期六

Android WorkManager DI Set Up With Koin | WorkManager 搭配 Koin 使用

這次導入 work 要搭配 koin,所以配置上比較麻煩一些。

首先加入 work 依賴

     //2.7需要api31以上

    def work_version = "2.6.0"

    implementation "androidx.work:work-runtime-ktx:$work_version"

    androidTestImplementation "androidx.work:work-testing:$work_version"

2021年11月28日 星期日

Android 設定 app-ads.txt 後,test ad 失效



在 debug 模式發現 adview 回傳

onRewardedAdFailedToLoad = {
"Code": 3,
"Message": "No ad config.",
"Domain": "com.google.android.gms.ads",
"Cause": "null",
"Response Info": {
"Response ID": "null",
"Mediation Adapter Class Name": "",
"Adapter Responses": []
}
}

2021年11月27日 星期六

Android targetSdkVersion up to 31(Android 12)

今天將 side project 升上 android 12 後,在模擬器上連裝都不能裝,原來無法無痛升級QQ

首先遇到這個 INSTALL_PARSE_FAILED_MANIFEST_MALFORME ,官網說如果是四大組件有用到 intent-filter 就要聲明 exported 的值。

2021年11月25日 星期四

Android 橫直轉換時導航欄覆蓋畫面 | Navigation Bar overlay

最近在做的功能會有橫直轉換的需求,同時也會隱藏系統的導航按鈕。當畫面轉為橫式時,隱藏狀態欄和導航欄,返回直立時,顯示狀態欄和導航欄。

這時候問題就發生了,返回直立時,導航欄會蓋在畫面上,這時候就在根畫面上添加

android:fitsSystemWindows="true"


就好惹!

參考

橫直轉換官方文件



2021年11月24日 星期三

Android Deeplink || Applink on Android 12

最近同事反應在 android 12 上,deeplink 壞掉了,於是展開了一段追查之旅。

總之就是 deeplink 在 android 12 的行為預設為先開啟瀏覽器,如果你的網址在瀏覽器 redirect 後有做處理,那 app 端可以接上照理說沒有什麼問題,但是如果沒有,那就轉不回 app 了,於是這也不是我要的行為,app 這邊已經都直接解析原始網址了,所以在 android 12 基本上就是不能用。

2021年9月9日 星期四

成為 AZ 戰士吧!

 經過漫長的等待,終於在今天早上打到 AZ 疫苗,老爸跟妹妹都來電告知注意事項,五告甘心。


公司給了四小時的公假,我就留到下午才請,早上到診所,人不多,填完資料就被叫進去打疫苗,醫生邊口頭告知不能揉,然後請我稍後 15 分鐘,沒事即可離開,沒有量體溫血壓也沒有送我退燒藥QQ。


早上打完依然在家上班,也沒什麼感覺,買了兩瓶 Fin 備戰,附近藥房的普拿疼都賣完了,藥師說選成份相同的就好,說紅色的有多加咖啡因所以才比較有效,我就買了力停疼,只是這個藥的名字實在不討喜阿。


到了下午開始有點倦了,工作弄到三點就開始請假,頭昏昏的不知道寫的扣會不會之後看到會不會奔饋XD


到了晚下頭已經開始咻咻咻的痛了!還會忽然開始打寒顫,室友看到我的下巴不斷高速震動竟無良的笑了...好久沒看到她笑得這麼開心?


到了半夜,吃了一顆藥,不過似乎沒有發燒,只是身體一直覺得冷冷熱熱,要蓋被子也不是,不蓋又冷到發抖,還睡不著,想著明天來請個病假好了!耶~



2021年8月28日 星期六

Android 使用 ShapeableImageView 動態設置 Imageview 圓角 | Dynamically set radius use shapeableImageView

ShapeableImageView 設置圓角

<com.google.android.material.imageview.ShapeableImageView
android:id="@+id/ivImg"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>

then

使用 kotlin 的 extend 

fun ShapeableImageView.setRadius(@DimenRes source: Int) {
val radius = context.getDimenFloat(source)
val newShapeAppearanceModel = shapeAppearanceModel.toBuilder()
.setAllCornerSizes(radius)
.build()
shapeAppearanceModel = newShapeAppearanceModel
}


就很方便的根據每次的需求去改變 radius 惹~



參考

ShapeableImageView – Material components for android [Example]



2021年8月19日 星期四

2021/07/09 購入禾聯HERAN HDF-14A3

禾聯HERAN HDF-14A3

 

平價DC

在租屋處想買個便宜的 DC 電風扇不是一件易事,財富不自由的情況下想要 CP 值高又不被雷到就是爬了一堆文然後還是不知道買哪一台。

2021年8月18日 星期三

有效率的工作流程

 


上一篇提到為什麼我會覺得這間公司工作流程蠻順的,想要探討一下上一間公司跟這一間公司的差異。


重點不在工具

上一間公司雖然一開始用 Github 管理工作事項,後來換到 ClickUp,但本質上工作事項的流動不是單向的,會讓人覺得很煩,像是客服可能會私底下 slack 一些 bug,或是使用者問的一些問題,讓人不得不放下手邊的工作去處理。在 TODO 上的工作事項就一直 padding 下去,而且 TODO 上看不到下兩周要做的事,通常主管會說一下這一季的目標,但也沒有真的 break down,就是都要自己問下一個工作是什麼這樣。

即將結束的WFH

 


新工作到目前約兩個半月,都是在家工作,但是下禮拜就要回到辦公室了,以此文哀悼。

2021年8月14日 星期六

Android RecyclerView 拖曳與排序 | 固定位置與拖曳特定的 childView | Drag And Drop The Descendants Of Viewholder

最近的新任務是RecyclerView 的拖曳與排序功能,幫 viewHolder 換位置,但是有特定的位置是不能動的,且是按著 viewHolder 的 childView 才能移動,那就開始吧~


分為 3 步驟:

1. google 可上下拖曳換位置的功能
2. 改成按著 childView 才能拖曳
3. 禁止特定位置換位置的功能

2021年8月10日 星期二

Android In-App update 好雞肋阿

最近在想幫 Side project 加一個 In-App update 的功能,看完了文件稍微覺得有點怪怪的,想說上一間公司同事已經有實作過,應該沒什麼問題才對。

Github 當作 Play Store 開發者網站,設定 app-ads.txt

2019 年就被提示要設定這個東西,想不到 2021 年的我才想來弄,反正 App 也只有奈米收入

不過我沒有個人網站,blogger 提供了 ads.txt,害我本來想放這裡卻失敗了,然而建個人網站對我來說成本太高,於是印象中有看過放在 github 上,就來試試吧~

2021年7月18日 星期日

Android DialogFragment memory leak? 內存洩漏?!

 今天想簡單使用一個 loading dialog,卻發現怎麼用都會跳出 memory leak,看了各路的解法都覺得很麻煩,又想說這種原生的包應該在tracker應該是找得到...

果然看到這裡


通常像這種 loading dialog 我都會當作一個變數存著,調用時判斷是不是 null,然後 show 跟 dismiss 來用,不過 DialogFragment 如果把他當變數存著他就要報 memory leak 了,所以調整作法就是要調用時使用 findFragmentByTag,莫非,這是很基本的問題... 


2021年6月23日 星期三

Android Debug 紀錄之 UnknownHostException

Fatal Exception: java.net.UnknownHostException
Unable to resolve host "xxx.xxx.com": No address associated with hostname



這個問題在於如果你的 call api 時是沒有網路的,會產生的exception,要記得把他 catch 起來^^

Android Debug 紀錄之 CalledFromWrongThreadException、BadTokenException

Fatal Exception: android.view.ViewRootImpl$CalledFromWrongThreadException
Only the original thread that created a view hierarchy can touch its views.



這個完全沒什麼好說的,就是沒在UI thread 調用 UI 物件像是各種 view,到底為什麼這樣的 code 可以通過測試我也是不懂,開發者只要有自己測過就一定會 crash 嘛!

bulid app 時常發生的問題

Unable to determine application id: com.android.tools.idea.run.ApkProvisionException: No outputs for the main artifact of variant: debug

why???

2021年6月21日 星期一

kotlin typealias 用法筆記

之前去聽 kotlin FP 的讀書會時,講者很快的帶過了這個關鍵字,那時候只覺得很神奇,近日為了將 lambda 作為參數傳遞,本 lambda 還帶參數,寫起來落落長,就去找簡化的方法。

Interface Or Lambda 

我使用的場景其實應該可以用 interface 就好,但覺得 typealias 的功能實在太酷,直接將我原本的 lambda 命名為一個叫簡短的名字,雖然參數只能放型別,但感覺上比宣告一個 interface 炫多了XD

typealias aGoodName = (String, String) -> Unit

疑慮的部分就是參數只能放型別,這樣會不會兩個月後就忘記這兩個參數是要幹嘛?!雖然是可以到實際調用處看或是寫註解,但好像不是根本的解決之道...



2021年6月17日 星期四

Android webview programming click class in HTML 自動點擊 webview 的物件



最近有個需求是要依照後端發來的推播去開啟 webview 的指定頁面,頁面的順序像是這樣:

A page click button and then redirect to B page...

以此類推

2021年6月12日 星期六

adb 使用 android.intent.action.VIEW 開啟 deeplink 會缺少部分網址(query的部分)

 這幾天在重構公司的 deeplink 事件,tune 的時候使用 adb 發事件給 android 後發現有帶 query 的網址會少 query 那一段


原本指令

adb shell am start -a android.intent.action.VIEW -d "https://aaa.183club.com/5566/633.html?tab=817&action= fate&value=9478" com.qqq.aaa.ddd

2021年6月9日 星期三

Memory Leak Fix: when use timer in viewholder

當開始使用 Leakcanary 之後,我的興趣就從寫 code 變成找 Memory Leak (以下簡稱ml)了XD

debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.7'

2021年6月8日 星期二

koin 注入 viewModel 時用 byVewModel 會無法 launch viewModelScope, 須改用getViewmodel

情境:

使用 koin "io.insert-koin:koin-android:3.0.2"

viewModel 中使用 viewModelScope.launch {}

在 viewpager 右滑多個 fragment 後,往回滑,在 fragment 重建 view 後,viewModel 跑不進 viewModelScope.launch {} 的 lambda ,在 官方 issue 看到了解法(連結),就是不要使用 byViewModel{} 而是使用 getViewModel(),解是解了,但是為什麼呢?!



2021年3月20日 星期六

讀後感:原子習慣

讀本書的目的就是如何讓好的習慣成功建立,消除不好的習慣,事實上也蠻有用的。裡面有些觀念很顛覆我的想法。


決定你成功或失敗的,不是你的目標,而是你的系統

達成目標只能暫時解決問題,帶來短暫的快樂,失敗則會痛苦失望,目標讓我們把自己框在一個狹義的快樂裡;重點應該擺在系統,也就是日常的習慣,不斷精進與持續改善,我們不是參加一場比賽,而是一直在比賽中。

2021年1月30日 星期六

讀後感:親愛的,別害怕與眾不同

聽過本人的演講後,再讀這本書,某種程度上你真的能感受到作者是誠懇的對著你說。


這本書對我來說算是工具書?!讀了兩次,覺得這本書跟最近在讀的一些商管書在觀念上不謀而合,也許作者早已看過那些書所以也融入寫作之中,分享其中一些對我有影響的概念。

2021年1月26日 星期二

愛情的尾牙 Feat Snail 蝸牛義大利餐廳

又到了一年一度的尾牙時節,我也找了一間餐廳犒賞這一年來擔任另一半的室友。想吃個有點貴又不會太貴的店也不是很好找,最後就找到了這間 Snail 蝸牛義大利餐廳,google map 上有 4 星以上且 3000+ 的評論,再怎樣也不至於雷吧!!!現在看評論數也不太準,還要進去翻一下評論都寫了啥?

2021年1月24日 星期日

日本雙人花牌(花札)遊戲介紹與教學

任天堂花
任天堂 都の花

第一次接觸花牌時是在櫻花大戰裡的小遊戲,跟各路妹子大戰花牌,第二次是前幾年玩人中之龍時,在某個公園裡也有花牌小遊戲,當然複習一下就上手了,靠著花牌掙了不少錢XD,然而最近的一次是看韓劇-我的新創時代裡面玩花牌的畫面,霎那間讓我好懷念這個遊戲,對啊,我怎麼沒有想過要玩實體的?上網查了一下發現花牌竟是任天堂的起家厝,實際上玩起來要自己判斷役型,不過我沒有玩得很複雜,也許之後熟練以後會加入更多規則來玩。

2021年1月23日 星期六

讀後感:QBQ!問題背後的問題

 每個人在第一時間,往往會做負面的反應,因此腦海中浮現出「錯誤問題」或「爛問題」。但是,如果能在每一個抉擇的當下修鍊自己的想法,看到原始問題的背後意涵,再提出更好的問題,那麼問題本身將引導我們獲得更圓滿的結局。

2021年1月7日 星期四

快速把參考文獻格式化,讓文章引用看起來很專業!

想提升你的文章的專業度嗎?每次看完書,後面都滿滿的參考文獻,你知道是怎麼做出來的嗎?不知道沒關係,這裡介紹你一個工具,免費讓你用用看。

當你的文章需要引用其他文獻時,有個快速的工具可以幫你整理成標準的引用格式,就算你不是在寫論文!

2021年1月5日 星期二

讀後感:零規則

經由之前的講者推薦的書目,讀起來非常暢快,書裡許職場觀念令人耳目一新,從沒想過,原來這樣也行,不過這些觀念的一個大前提是:你的公司必須是高人才密度。這在頂尖公司當然沒問題,但大多數公司應該都是平庸之輩吧XD