在鎖屏 MultiWaveView 的電話圖標右上角顯示未接來電計數,需自訂 View 疊加於圖標上方,並用 ContentObserver 監聽通話記錄變化觸發重繪。
FrameLayout 將電話圖標置於底層,未接來電計數 View 置於上層(初始 VISIBLE/GONE 控制)。View,覆寫 onDraw() 繪製紅色圓形背景與數字。public class MissCallObserver extends ContentObserver {
public MissCallObserver(Handler handler) { super(handler); }
@Override
public void onChange(boolean selfChange) {
int count = getMissedCallCount(context);
if (count != lastCount) {
lastCount = count;
handler.post(() -> missedCallView.setCount(count)); // 觸發重繪
}
}
}
getContentResolver().registerContentObserver(
CallLog.Calls.CONTENT_URI, true, new MissCallObserver(handler));
READ_CALL_LOG 權限。KeyguardViewMediator 或對應 XML 中)。onDraw 使用 Canvas.drawText 繪製數字,座標需根據圖標大小調整。