目前分類:Android (119)

瀏覽方式: 標題列表 簡短摘要

我們專案裡有用到通話功能

只要有一端打電話,就會送推播通知另一端

然後收到推播後就會開啟響鈴的 Activity

 

現在問題來了,當手機閒置很久沒用的時候


文章標籤

顏澤偉 發表在 痞客邦 留言(0) 人氣()

log 沒印出來的這個問題搞了我一個早上

不斷檢查程式哪裡出了問題

最後換了一隻測試機發現沒問題,可以正常印出 log

這才想是不是 Huawei 的手機問題

 

顏澤偉 發表在 痞客邦 留言(0) 人氣()

專案實作指南針功能時,需要註冊 Sensor Listener

關於 Sensor 的生命週期

我們通常會在 onResume 時開始監聽

但在 onPause 時就取消

以免太過消耗電力

文章標籤

顏澤偉 發表在 痞客邦 留言(0) 人氣()

今天打算用 command line 指令./gradlew assembleRelease

打包各 flavors 的 apk 時,出錯如下

======================

Starting a Gradle Daemon, 1 incompatible Daemon could not be reused, use --status for details

FAILURE: Build failed with an exception.

文章標籤

顏澤偉 發表在 痞客邦 留言(0) 人氣()

開發一套已有大量使用者的 APP 時通常都要小心一點

為了程式的穩定性與品質

我們都會建立各種環境來把關

像是 dev 開發環境,sit 整合測試環境,uat 情境測試環境,prod 正式環境… 之類的

雖然每個公司的環境不一樣,但卻是大同小異的

文章標籤

顏澤偉 發表在 痞客邦 留言(0) 人氣()

Google 一直有個限制

apk 不能大於 100MB

基於解決這個限制

Google 提供了 APK Expansion Files 的方式來外掛資源檔

所以我們就可以把 res 裡面的東西額外分離出來

文章標籤

顏澤偉 發表在 痞客邦 留言(0) 人氣()

compile 在 2018年底已經不再支援了

所以升級 Gradle 成了必然

而升級到 Gradle 3 以上的朋友第一個遇到的問題應該就是下面這個

WARNING: Configuration 'compile' is obsolete and has been replaced with 'implementation' and 'api'.
 

文章標籤

顏澤偉 發表在 痞客邦 留言(0) 人氣()

今天剛拿到新電腦

在建置環境的過程中遇到了一些問題

這次裝的 Android Studio 版本為 3.3.2

在我高高興興載下專案要 build 的時候

文章標籤

顏澤偉 發表在 痞客邦 留言(0) 人氣()

在嘗試使用 MVVM 架構時,使用 DataBinding 遇到了此問題 part2

一 Build 就會出錯,錯誤訊息如下

Found data binding errors.
****/ data binding error ****msg:Cannot find the getter for attribute 'android:background' with value type int on android.support.constraint.ConstraintLayout. file:XXX ****\ data binding error ****

我們很明顯的可以從訊息看出 background 的值 type 是 int

顏澤偉 發表在 痞客邦 留言(0) 人氣()

在嘗試使用 MVVM 架構時,使用 DataBinding 遇到了此問題

只要我進入目標 Activity 就會 Crush,出現下列錯誤

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.xxxxxx.AroundCircleActivity}: android.view.InflateException: Binary XML file line #2: Binary XML file line #2: Error inflating class layout
       

而出錯的地方是 setContentView

文章標籤

顏澤偉 發表在 痞客邦 留言(0) 人氣()

今天在試著引入 Butterknife 10.1.0 後發生的問題

錯誤訊息如下:

Manifest merger failed : 
Attribute application@appComponentFactory 
value=(android.support.v4.app.CoreComponentFactory) 
from [com.android.support:support-compat:28.0.0] 
AndroidManifest.xml:22:18-91 is also present 
at [androidx.core:core:1.0.0] 
AndroidManifest.xml:22:18-86 
value=(androidx.core.app.CoreComponentFactory).

Suggestion: 
add 'tools:replace="android:appComponentFactory"' 
to <application> element 
at AndroidManifest.xml:5:5-23:19 to override.

 

此錯誤訊息告訴我們 Manifest 合併時失敗

其實是 support v28 和 androidx 無法同時存在的關係

文章標籤

顏澤偉 發表在 痞客邦 留言(0) 人氣()

Meterial Design 裡面有一個 SnackBar 的元件

此元件可以說是 Toast 的進階版本

都是用來呈現簡短的訊息的元件

由於 Toast 不符合 Meterial Design 的設計風格

所以才有 SnackBar 的出現

文章標籤

顏澤偉 發表在 痞客邦 留言(0) 人氣()

在看一個 UI 庫原碼時

看到了一個監聽的類 ViewTreeObserver 

今天我們就來介紹一下此 class 吧。

 

Observer 的設計模式大家多少都有看過

文章標籤

顏澤偉 發表在 痞客邦 留言(0) 人氣()

這陣子幫專案寫指紋登入的功能

花了一點時間看文件後,決定做一個 helper 來簡化流程

 

要在程式中使用 Fingerprint API 其實很簡單

只要滿足以下三個步驟

文章標籤

顏澤偉 發表在 痞客邦 留言(0) 人氣()

今天看到同事有報出以下錯誤

error: Multiple substitutions specified in non-positional format; did you mean to add the formatted="false" attribute?
error: Unexpected end tag string

 

這是一個在 string.xml 中設定字串時要注意的一件事

文章標籤

顏澤偉 發表在 痞客邦 留言(0) 人氣()

今天我們開發時發生了「靈異事件」

各位看倌請看一下這段 code 

view.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        GG.d("RDBG:onClick() => view.isClickable()="
         +view.isClickable()+" / id="+view.getId());
    }
});

然後觸發點擊輸出如下

 

文章標籤

顏澤偉 發表在 痞客邦 留言(0) 人氣()

開發過程中,一定很常遇到傳值這件事

而傳值的方法也很多種,相關的議題也是讓人討論再三

今天我們就來談談 Acitivy 和 Fragment 兩種傳值的基本方式吧


1、Bundle 

文章標籤

顏澤偉 發表在 痞客邦 留言(0) 人氣()

今天發生件怪事

明明 code 都一模一樣的,用同一份程式碼去 build & run

但用模擬器跑就會 crush,手機確卻正常啟動

模擬器移除 app 再重新安裝也無法解決

最後請教前輩的經驗,才知道和 Android Studio 有關係

文章標籤

顏澤偉 發表在 痞客邦 留言(0) 人氣()

今天來講在開發時碰到的小問題 Application Installation Failed 

不論是在模擬器,還是在手機都沒辦法安裝 app

造成這樣的原因已知有2種

 

文章標籤

顏澤偉 發表在 痞客邦 留言(0) 人氣()

前篇我們提到了解決 Call requires API level 的 Annotation 不止一個

今天我們就來說說其差異性在哪

一共有三個 Annotation 要解說

// 此 class 需要 M 以上調用,否則會 crush
@RequiresApi(api = Build.VERSION_CODES.M)
@TargetApi(Build.VERSION_CODES.M)
@SuppressLint("NewApi")
public class FingerprintHelper { 。。。}

 

1、@TargetApi(Build.VERSION_CODES.M)@TargetApi(23)

文章標籤

顏澤偉 發表在 痞客邦 留言(0) 人氣()