一、為何那些“雞肋”Android App在功能體驗(yàn)上總是差強(qiáng)人意
一、背景概述
眾所周知,許多國產(chǎn)App的iOS版本表現(xiàn)明顯優(yōu)于Android版本。除了Android系統(tǒng)本身的原因外,還有哪些因素導(dǎo)致了這種體驗(yàn)差異呢?本文將以相機(jī)功能為例,深入分析那些被吐槽為“雞肋”的Android App所面臨的問題及其影響,并期望這些App能盡早規(guī)范使用API,以達(dá)成更佳的用戶體驗(yàn)。

二、Android Camera API的使用現(xiàn)狀
盡管Android的Camera 2 API已經(jīng)推出一段時(shí)間,但由于底層軟件等種種原因,支持并不完善。大部分App仍然使用Camera 1 API。本文將主要圍繞Camera 1 API的App展開討論。
三、對焦模式(Focus mode)的困惑
對于App開發(fā)者來說,對焦模式是一個(gè)容易混淆的點(diǎn)。常見的對焦模式有AUTO、CONTINUOUS_PICTURE和CONTINUOUS_VIDEO。
AUTO模式:看似是自動對焦,但實(shí)際上,只有當(dāng)App主動請求對焦時(shí),相機(jī)才會進(jìn)行一次對焦,完成后不會再自動重新觸發(fā)。

CONTINUOUS_PICTURE模式:當(dāng)相機(jī)算法檢測到場景變化需要重新對焦時(shí),會自動觸發(fā)對焦,無需App控制。這種模式通常被系統(tǒng)自帶相機(jī)所采用。
CONTINUOUS_VIDEO模式:與PICTURE模式相似,但在觸發(fā)對焦和對焦過程中更為緩和,主要用于錄像。
四、對焦區(qū)域(Focus area)的問題
對焦區(qū)域默認(rèn)為中心對焦,App也可以根據(jù)需要設(shè)定。在設(shè)定對焦區(qū)域時(shí),第三方App常常遇到一些問題。
根據(jù)Android官方文檔,對焦區(qū)域的坐標(biāo)是基于CMOS方向的左上角。這意味著,即使是豎屏App,設(shè)定對焦、測光等坐標(biāo)時(shí),應(yīng)以傳感器方向的坐標(biāo)系為準(zhǔn),而不是屏幕方向。這一點(diǎn)往往被開發(fā)者忽視,導(dǎo)致對焦功能在實(shí)際使用中出現(xiàn)問題。

五、給第三方App的建議
對于第三方App來說,非必要情況下,應(yīng)盡量使用CONTINUOUS_PICTURE或CONTINUOUS_VIDEO模式,避免設(shè)置Focus area,以獲得快速且體驗(yàn)良好的對焦。尤其是掃碼類App,更應(yīng)注重這一點(diǎn)的實(shí)現(xiàn)。
如果必須設(shè)置Focus area,開發(fā)者應(yīng)認(rèn)真閱讀Android官方文檔,確保正確實(shí)施,以避免出現(xiàn)不必要的問題。規(guī)范使用API不僅能提高App的穩(wěn)定性,也能提升用戶的使用體驗(yàn)。希望這些建議能幫助到那些正在努力優(yōu)化相機(jī)功能的App開發(fā)者們。探索優(yōu)質(zhì)App的拍照功能:從對焦細(xì)節(jié)看體驗(yàn)差異
一、引言:選擇一款無問題的App
在眾多的手機(jī)App中,我們選取了一款經(jīng)過優(yōu)化的App進(jìn)行深入研究。我們隨手翻開手機(jī),調(diào)用其內(nèi)置的百度搜索拍照功能,來一探究竟。

二、正確設(shè)定AF模式
在拍照功能的背后,隱藏著復(fù)雜的對焦機(jī)制。我們注意到,這款A(yù)pp正確設(shè)定了AF模式(這里的3= ControlAFModeContinuousVideo)。在camxcafioutil.cpp文件的1411行,ReadFocusMode()函數(shù)顯示了HALFocusMode= 3,AlgoFocusMode= 2,SceneMode= 1,表明其對焦模式的選擇是精準(zhǔn)而恰當(dāng)?shù)摹?/p>
三、對焦區(qū)域的設(shè)置
當(dāng)我們不使用點(diǎn)擊畫面進(jìn)行對焦時(shí),這款A(yù)pp并沒有設(shè)定任何Focus area。當(dāng)用戶進(jìn)行點(diǎn)擊畫面對焦時(shí),情況就不同了。這款A(yù)pp的Focus area坐標(biāo)設(shè)置準(zhǔn)確,對焦框大小設(shè)置也相對合理。這使得用戶能夠精準(zhǔn)地對特定區(qū)域進(jìn)行對焦,提升拍照效果。
四、細(xì)節(jié)分析:點(diǎn)擊不同位置的對比

我們進(jìn)一步測試了這款A(yù)pp在不同點(diǎn)擊位置的表現(xiàn)。當(dāng)點(diǎn)擊豎持手機(jī)的右上角(即CMOS方向的左上角,傳感器分辨率為4000x3000)和右下角(即CMOS方向的右上角)時(shí),App的camxcafioutil.cpp文件中的RetrieveFocusRegions()函數(shù)展示了具體的ROI(感興趣區(qū)域)信息。這些信息包括ROI的類型、權(quán)重、坐標(biāo)等,反映了App對不同點(diǎn)擊位置的響應(yīng)和處理方式。
五、問題探究:熱門App的行為與體驗(yàn)瓶頸
盡管這款A(yù)pp的表現(xiàn)可圈可點(diǎn),但市場上仍有許多熱門App的拍照功能存在諸多問題。那么,問題究竟出在哪里呢?為什么用戶在使用某些熱門App時(shí)的體驗(yàn)不佳?這需要我們深入探究這些App的拍照功能設(shè)計(jì)、算法優(yōu)化、用戶體驗(yàn)等方面,以期找到問題的答案。
從對焦細(xì)節(jié)可以看出,一款優(yōu)質(zhì)的App需要在細(xì)節(jié)上做到極致,才能提供良好的用戶體驗(yàn)。而市場上的熱門App也需要不斷反思和改進(jìn),以提供更出色的拍照功能。微信(版本 7.0.3)的掃一掃功能:
一、掃一掃功能的對焦特點(diǎn)

微信掃一掃功能非常注重設(shè)定Focus Area(對焦區(qū)域)。設(shè)定的對焦區(qū)域大小幾乎相當(dāng)于整個(gè)畫面大小,這種設(shè)計(jì)非常神奇。在進(jìn)入掃一掃功能后,大約2秒時(shí)間內(nèi),對焦模式會從初始的CONTINUOUS_VIDEO轉(zhuǎn)變?yōu)锳UTO模式。這種轉(zhuǎn)變確保了掃一掃功能能夠快速準(zhǔn)確地對焦。
二、自動與手動對焦的結(jié)合
在設(shè)定為AUTO模式后,除非App要求重新對焦,相機(jī)算法通常不會根據(jù)場景變化自動重新對焦。為了解決這個(gè)問題,微信采取了一個(gè)獨(dú)特的設(shè)計(jì)策略:每兩秒由App重新觸發(fā)一次對焦。這種設(shè)計(jì)確保了掃一掃功能的對焦始終保持在最佳狀態(tài)。
支付寶(版本 10.1.59.231)的掃碼功能:
三、掃碼功能的對焦設(shè)置

支付寶的掃碼功能在AF mode(自動對焦模式)上設(shè)置沒有問題,但也設(shè)置了一個(gè)Focus area。這個(gè)Focus area的大小似乎過于龐大,對于部分手機(jī)而言,這可能導(dǎo)致部分輔助對焦手段失效。
四、微博(版本 9.3.2)的相機(jī)功能
在發(fā)布微博故事或拍照、拍視頻時(shí),微博的相機(jī)功能與微信小視頻存在相似的坐標(biāo)問題,而且對焦框的大小更為過分。微博的強(qiáng)制觸發(fā)對焦機(jī)制相對智能且快速,最長4秒強(qiáng)制觸發(fā)一次,當(dāng)畫面內(nèi)容有變化時(shí)能夠快速觸發(fā)。盡管體驗(yàn)相對較好,但并不是最佳。
五、其他App的掃一掃功能
其他如京東、淘寶等App的掃一掃功能,雖然在設(shè)計(jì)和體驗(yàn)上與微信、微博有所不同,但同樣存在著一些問題。例如,京東的掃一掃功能與微博相似,但沒有那么頻繁地觸發(fā)對焦。而淘寶的掃一掃功能則表現(xiàn)出較為正常的AF mode,并未設(shè)置AF area。

綜上所述:
如果你不確定正常的相機(jī)掃碼對焦體驗(yàn)應(yīng)該是什么樣的,可以打開淘寶或百度內(nèi)的相機(jī)作為參考,再與其他App進(jìn)行對比。這樣,你就能明顯感受到不同App在相機(jī)掃碼功能上的設(shè)計(jì)與體驗(yàn)差異。淘寶和百度的相機(jī)功能通常表現(xiàn)出較為正常的對焦體驗(yàn),而其他一些App則可能存在各種問題。一、應(yīng)用程序問題導(dǎo)致手機(jī)廠商被迫調(diào)整系統(tǒng)行為
一、引言
隨著移動應(yīng)用的普及,某些應(yīng)用程序在國內(nèi)的流行也帶來了不少問題。當(dāng)用戶遇到投訴問題時(shí),往往將矛頭指向手機(jī)廠商,而非直接找應(yīng)用開發(fā)者。這導(dǎo)致部分手機(jī)廠商為了降低投訴,不得不根據(jù)這些應(yīng)用的問題修改系統(tǒng)行為。這種做法并未有效推動應(yīng)用開發(fā)者自身的改進(jìn),反而可能為應(yīng)用開發(fā)者提供了回避問題的借口。
二、Android應(yīng)用開發(fā)中的注意事項(xiàng)

本次Android應(yīng)用開發(fā)使用的是Android Studio軟件平臺。在開發(fā)過程中,我們遇到了以下幾個(gè)值得注意的方面:
1. 工程創(chuàng)建時(shí)的語言選擇
在創(chuàng)建新的Project工程文件時(shí),初始默認(rèn)語言是Kotlin。在創(chuàng)建過程中,由于與Kotlin相關(guān)的配置包無法順利下載,導(dǎo)致無法完成新工程的創(chuàng)建。在嘗試多種解決方案后,我們決定將語言選項(xiàng)改為Java,這樣工程才能順利完成初始化。雖然之前也使用過Android Studio新建工程,但這次的經(jīng)驗(yàn)提醒我們,對于初學(xué)者來說,選擇熟悉的開發(fā)語言更為穩(wěn)妥。
2. 模板選擇與后續(xù)設(shè)計(jì)
在APP設(shè)計(jì)時(shí),我們遇到了因模板選擇不當(dāng)而導(dǎo)致的問題。選擇了BasicActivity模板后,設(shè)計(jì)過程中使用的是fragment,與我們熟悉的activity設(shè)計(jì)存在較大差異。由于相關(guān)資料較少,我們決定新建EmptyActivity,采用更熟悉的Activity進(jìn)行開發(fā)。對于APP開發(fā)入門者來說,選擇EmptyActivity作為起點(diǎn)更為合適。

3. 權(quán)限問題與版本差異
在開發(fā)過程中,我們需要調(diào)用手機(jī)中的相冊或相機(jī)等部件,這就涉及到了權(quán)限問題。在Android應(yīng)用中,如果權(quán)限處理不當(dāng),很容易導(dǎo)致閃退。在使用相關(guān)代碼調(diào)用前,必須解決權(quán)限問題,包括在AndroidManifest.xml中添加權(quán)限語句、在Activity文件中編寫相關(guān)權(quán)限檢測和申請函數(shù)等。不同版本的Android可能存在不同的解決方案,開發(fā)者在查詢網(wǎng)絡(luò)上的解決方案或?qū)崿F(xiàn)某些功能的代碼操作時(shí),必須注意版本差異。例如,從Android 10開始,權(quán)限讀寫操作受到了更嚴(yán)格的限制;而到Android 11,讀寫操作更是受到了進(jìn)一步的限制。
4. 使用外部函數(shù)庫的問題
本次開發(fā)還使用了一些外部函數(shù)庫,如opencv。使用這些庫時(shí),需要注意其獨(dú)有的配置問題,如初始化等。由于這些問題可能導(dǎo)致閃退等錯(cuò)誤,因此開發(fā)者必須格外注意。
三、總結(jié)

本次Android應(yīng)用開發(fā)過程雖然遇到了一些挑戰(zhàn),但通過不斷學(xué)習(xí)和實(shí)踐,我們成功解決了問題并完成了開發(fā)。在這個(gè)過程中,我們深刻體會到了選擇合適的開發(fā)語言、模板、注意權(quán)限問題和版本差異以及使用外部函數(shù)庫時(shí)的小細(xì)節(jié)的重要性。這些經(jīng)驗(yàn)將為我們未來的開發(fā)之路提供寶貴的參考。
三、Android開發(fā)權(quán)威指南的圖書目錄
第一部分 準(zhǔn)備篇
了解Android開發(fā)的基礎(chǔ)知識和環(huán)境搭建,包括Android的基本概念、版本、系統(tǒng)構(gòu)架、應(yīng)用程序框架,以及JIL Widget的簡介。掌握Android開發(fā)環(huán)境的搭建,包括JDK、Eclipse、Android SDK和ADT插件的安裝和配置。體驗(yàn)Android開發(fā),包括創(chuàng)建第一個(gè)Android程序,如隨機(jī)繪制圓餅,以及調(diào)試和運(yùn)行程序。
第二部分 基礎(chǔ)篇
深入理解Android程序設(shè)計(jì)基礎(chǔ),包括Android應(yīng)用程序框架、資源、組件和UI設(shè)計(jì)。探討Activity、Service、Broadcast Receiver、Content Provider等組件的使用,以及Android程序中的UI設(shè)計(jì),包括XML布局文件、可視化UI設(shè)計(jì)器和DroidDraw工具。
第三部分 高級篇
探索Android開發(fā)的進(jìn)階內(nèi)容,涵蓋HTML5與移動Web開發(fā)、輸入法開發(fā)、OpenGL ES開發(fā)基礎(chǔ)及超酷效果、Android NDK編程和測試驅(qū)動開發(fā)(TDD)。
第四部分 綜合實(shí)例篇

通過一系列綜合實(shí)例,如藍(lán)牙聊天、月球登陸游戲、全鍵盤輸入法、新浪微博客戶端、笑臉連連看游戲等,來鞏固和拓展Android開發(fā)技能,將理論知識應(yīng)用于實(shí)際開發(fā)中。
第五部分 拓展篇
探討Android開發(fā)中的其他高級主題,如傳感器應(yīng)用、輸入輸出技術(shù)、Google地圖、GPS定位、動態(tài)壁紙等,以及如何將Android開發(fā)與其他技術(shù)如HTML5、OpenGL ES、NDK等結(jié)合,以實(shí)現(xiàn)更豐富的應(yīng)用。
通過以上五個(gè)部分的內(nèi)容,讀者可以系統(tǒng)學(xué)習(xí)Android開發(fā),從基礎(chǔ)到高級,再到實(shí)際應(yīng)用,逐步掌握Android開發(fā)的全流程。