android如何適配
A. Android10以上拍照和選擇相冊適配以及向下兼容適配
最近一直被Android10相關的適配搞得焦頭爛額,之前也聽說過android10中的所有的視頻,音頻以及圖片等資源為了統一的管理,統一放在一個共有的文件下,也就是所謂的沙箱。看了一下其他人寫的文章,也提供了一種簡單粗暴的方式也就是在清單文件application下配置#android:requestLegacyExternalStorage="true"#,但如果android11出來又得適配了,android11是禁止除了共有文件夾下新建視頻,音頻以及圖片等文件。不然就會報找不到文件相關的錯誤,好了說到底我們還是得花點時間去適配android10以上的沙箱適配。
進入正題,接下來我們就來適配Android10相關的拍照以及選擇相冊並兼容android10以下的絕大部分的適配。
進入系統相冊的操作都是一樣的這里就不贅述:
主要的還是要對返回的data進行處理,也就是把uri轉換成文件File的路徑path
當然了拍照和點陣圖Bitmap相關的適配是一樣的。
7.0以上Android版本的路徑配置
第一步
@xml/file_camera_paths 文件配置
拍照首先需要申請拍照許可權
申請完後調用camera就可以拍照,拍照主要就是在調用相機的時需要自己去配置文件存儲路徑。
回調處理這里我就不贅述了 主要是對Android10以上關於圖片配置相關的處理
既然關於Android 10那麼我們也講一下關於定位方面的適配,Android10以上需要在清淡文件中添加一個新的定位許可權
B. Android 10(29)適配方案簡要說明
Android 10(29)適配方案簡要說明
1、根據Google官方文檔說明,Android10引入了大量變更
官方文檔: https://developer.android.google.cn/about/versions/10/highlights?hl=zh_cn
1.1、Android 10 中的隱私權變更
1.1.1重大隱私權變更
分區存儲
針對外部存儲的過濾視圖,可提供對特定於應用的文件和媒體集合的訪問許可權 訪問和共享外部存儲中的文件的應用 使用特定於應用的目錄和媒體集合目錄
增強了用戶對位置許可權的控制力
僅限前台許可權,可讓用戶更好地控制應用對設備位置信息的訪問許可權 在後台時請求訪問用戶位置信息的應用 確保在沒有後台位置信息更新的情況下優雅降級
使用 Android 10 中引入的許可權在後台獲取位置信息
系統執行後台 Activity
針對從後台啟動 Activity 實施了限制 不需要用戶互動就啟動 Activity 的應用 使用通知觸發的 Activity
不可重置的硬體標識符
針對訪問設備序列號和 IMEI 實施了限制 訪問設備序列號或 IMEI 的應用 使用用戶可以重置的標識符
無線掃描許可權
訪問某些 WLAN、WLAN 感知和藍牙掃描方法需要獲得精確位置許可權 使用 WLAN API 和藍牙 API 的應用 針對相關使用場景請求 ACCESS_FINE_LOCATION 許可權
1.1.2更多隱私權變更
標識符和數據: 針對硬體標識符(如 IMEI、序列號、MAC 和類似數據)實施了新限制。
移除了聯系人親密程度信息
隨機分配 MAC 地址
對 /proc/net 文件系統的訪問許可權實施了限制
對不可重置的設備標識符實施了限制
限制了對剪貼板數據的訪問許可權
保護 USB 設備序列號
攝像頭和連接性: 針對攝像頭元數據和連接 API 提供了更強大的保護措施。 對訪問攝像頭詳情和元數據的許可權實施了限制
對啟用和停用 WLAN 實施了限制
對直接訪問已配置的 WLAN 網路實施了限制
一些電話 API、藍牙 API 和 WLAN API 需要精確位置許可權
許可權 : 針對許可權模型和要求的一些變更。
限制對屏幕內容的訪問
面向用戶的許可權檢查(針對舊版應用)
身體活動識別
從界面中移除了許可權組
1.2影響應用的行為變更
文檔: https://developer.android.google.cn/about/versions/10/behavior-changes-all?hl=zh_cn
限制非 SDK 介面: 為了幫助確保應用的穩定性和兼容性,Android 平台開始限制應用在 Android 9(API 級別 28)中使用非 SDK 介面。Android 10 包含更新後的受限制非 SDK 介面列表(基於與 Android 開發者之間的協作以及最新的內部測試)。我們的目標是在限制使用非 SDK 介面之前確保有可用的公開替代方案。
手勢導航: 從 Android 10 開始,用戶可以在設備中啟用手勢導航。用戶啟用後,手勢導航會影響設備上的所有應用,無論應用是否以 API 級別 29 為目標平台。例如,如果用戶從屏幕邊緣向內滑動,系統會將該手勢解讀為「返回」導航,除非應用針對屏幕的相應部分明確替換該手勢。
NDK 方面的變更
共享對象不得包含文本重定位
Bionic 庫和動態鏈接器路徑變更
系統二進制文件/庫會映射到只執行內存
安全方面的變更
TLS 1.3 默認處於啟用狀態
TLS 不信任使用 SHA-1 簽名的證書
KeyChain 行為變更和改進
其他 TLS 和加密更改
WLAN 直連廣播
在 Android 10 中,以下與 WLAN 直連相關的廣播不具有粘性:
WIFI_P2P_CONNECTION_CHANGED_ACTION
WIFI_P2P_THIS_DEVICE_CHANGED_ACTION
如果的應用依賴於在注冊時接收這些廣播(因為其之前一直具有粘性),請在初始化時使用適當的 get() 方法獲取信息。
WLAN 感知功能
Android 10 擴大了支持范圍,現在可以使用 WLAN 感知數據路徑輕松創建 TCP/UDP 套接字。要創建連接到 ServerSocket 的 TCP/UDP 套接字,客戶端設備需要知道伺服器的 IPv6 地址和埠。這在之前需要通過頻外方式進行通信(例如使用 BT 或 WLAN 感知第 2 層消息傳遞),或者使用其他協議(例如 mDNS)通過頻內方式發現。而藉助 Android 10,可以將此類消息作為網路設置的一部分進行傳遞。
Go 設備上的 SYSTEM_ALERT_WINDOW
在 Android 10(Go 版本)設備上運行的應用無法獲得 SYSTEM_ALERT_WINDOW 許可權。這是因為繪制疊加層窗口會使用過多的內存,這對低內存 Android 設備的性能十分有害。
如果在搭載 Android 9 或更低版本的 Go 版設備上運行的應用獲得了 SYSTEM_ALERT_WINDOW 許可權,則即使設備升級到 Android 10,也會保留此許可權。不過,尚不具有此許可權的應用在設備升級後便無法獲得此許可權了。
如果 Go 設備上的應用發送具有 ACTION_MANAGE_OVERLAY_PERMISSION 操作的 intent,則系統會自動拒絕此請求,並將用戶轉到設置屏幕,上面會顯示不允許授予此許可權,原因是它會減慢設備的運行速度。如果 Go 設備上的應用調用 Settings.canDrawOverlays(),則此方法始終返回 false。同樣,這些限制不適用於在設備升級到 Android 10 之前便已收到 SYSTEM_ALERT_WINDOW 許可權的應用。
關於以舊版 Android 系統為目標平台的應用的警告
在搭載 Android 10 或更高版本的設備上,如果用戶首次運行以 Android 5.1(API 級別 22)或更低版本為目標平台的應用,則會看到警告。如果此應用要求用戶授予許可權,則系統會先向用戶提供調整應用許可權的機會,然後才會允許此應用首次運行。
由於 Google Play 的目標 API 方面的要求,用戶只有在運行最近未更新的應用時才會看到這些警告。對於通過其他商店分發的應用,我們也將於 2019 年引入類似的目標 API 方面的要求。如需詳細了解這些要求,請參閱在 2019 年擴展目標 API 級別方面的要求。
移除了 SHA-2 CBC 加密套件
以下 SHA-2 CBC 加密套件已從平台中移除:
TLS_RSA_WITH_AES_128_CBC_SHA256
TLS_RSA_WITH_AES_256_CBC_SHA256
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
這些加密套件不如使用 GCM 的類似加密套件安全,並且大多數伺服器要麼同時支持這些加密套件的 GCM 變體和 CBC 變體,要麼二者均不支持。
應用使用情況的變更
UsageStats 應用使用情況方面的改進 - 當在分屏或畫中畫模式下使用應用時,Android 10 現在能夠使用 UsageStats 准確地跟蹤應用使用情況。此外,Android 10 可以正確地跟蹤免安裝應用的使用情況。
按應用開啟灰度模式 - Android 10 可針對各個應用設置灰度顯示模式。
按應用開啟干擾模式 - Android 10 可以選擇性地將應用設置為「干擾模式」,此時系統會禁止顯示其通知,並且不會將其顯示為推薦的應用。
暫停和播放 - 在 Android 10 中,暫停的應用無法播放音頻。
HTTPS 連接變更
如果在 Android 10 上運行的應用將 null 傳遞給 setSSLSocketFactory(),則會出現 IllegalArgumentException。在以前的版本中,將 null 傳遞給 setSSLSocketFactory() 與傳入當前的默認 SSL 套接字工廠效果相同。
android.preference 庫已棄用
從 Android 10 開始,將棄用 android.preference 庫。開發者應該改為使用 AndroidX preference 庫,這是 Android Jetpack 的一部分。如需獲取其他有助於遷移和開發的資源,請查看經過更新的設置指南以及我們的公開示例應用和參考文檔。
ZIP 文件實用程序庫變更
Android 10 對 java.util.zip 軟體包(用於處理 ZIP 文件)中的類進行了以下變更。這些變更會讓庫的行為在 Android 和使用 java.util.zip 的其他平台之間更加一致。
Inflater
在以前的版本中,如果在調用 end() 之後調用 Inflater 類中的某些方法,這些方法會拋出 IllegalStateException。在 Android 10 中,這些方法會改為拋出 NullPointerException。
ZipFile
在 Android 10 及更高版本中,如果所提供的 ZIP 文件不包含任何文件,則 ZipFile 的構造函數(採用的參數類型為 File、int 和 Charset)不會拋出 ZipException。
ZipOutputStream
在 Android 10 及更高版本中,如果 ZipOutputStream 中的 finish() 方法嘗試為不包含任何文件的 ZIP 文件寫入輸出流,則此方法不會拋出 ZipException。
攝像頭變更
很多使用攝像頭的應用都會假定如果設備採用縱向配置,則物理設備也會處於縱向,正如攝像頭方向中所述。在過去可以做出這樣的假定,但隨著可用的設備類型(例如可折疊設備)的擴展,這一情況發生了變化。針對這些設備做出這樣的假定可能導致相機取景器的顯示產生錯誤的旋轉和/或縮放。
以 API 級別 24 或更高級別為目標平台的應用應該明確設置 android:resizeableActivity,並提供必要的功能來處理多窗口操作。
電池用量跟蹤
從 Android 10 開始,只要在發生重大充電事件之後拔下設備電源插頭,SystemHealthManager 就會重置其電池用量統計信息。一般來說,重大充電事件指的是設備電池已充滿,或者設備電量從幾乎耗盡變為即將充滿。
在 Android 10 之前,無論何時拔下設備電源插頭,無論電池電量有多微小的變化,電池用量統計信息都會重置。
Android Beam 已棄用
在 Android 10 中,我們正式棄用了 Android Beam,這是一項舊版功能,可通過近距離無線通信 (NFC) 在多個設備之間啟動數據共享。我們還棄用了一些相關的 NFC API。Android Beam 仍可供需要的設備製造商合作夥伴使用,但它已不再處於積極的開發階段。不過,Android 仍將繼續支持其他的 NFC 功能和 API,並且從標簽和付款中讀取數據等使用場景仍將繼續按預期執行。
C. Android的界面是如何適配多樣化屏幕
在研究Android的icon設計之前,有必要先了解Android的界面是如何適配多樣化屏幕的。
適配性
上一篇博文中提到,由於同一個UI元素(如100 x100像素的圖片)在高精度的屏幕上要比低精度的屏幕上看起來要小,為了讓這兩個屏幕上的圖片看起來效果差不多,可以採用以下兩種方法:
程序將圖片進行縮放,但是效果較差。
為這兩個精度屏幕的手機各提供一個圖片。
三種尺寸:大,中,小。
三種精度:高(hdpi),中(mdpi)和低(ldpi)。
但是屏幕的參數多樣化,為每一個精度的屏幕都設計一套icon,工作量大並且不能滿足程序的兼容性要求,勢必要對屏幕的分級,如在160dpi和180dpi的手機屏幕上採用同一套icon,當這套icon在240dpi效果滿足不了設計要求,就需要另做一套稍大些的icon。
在Android 1.5以及更早的版本中,只支持3.2″ 屏幕上的HVGA (320×480)解析度,開發人員也不需要考慮界面的適配性問題。從Android 1.6之後,平台支持多種尺寸和解析度的設備,這也就意味著開發人員在設計時要考慮到屏幕的多樣性。
為了簡化設計並且兼容更多的手機屏幕,平台依照尺寸和解析度對屏幕進行了區分:
程序可以為這三種尺寸的屏幕提供默認資源,如有需要,還可以為各種精度的屏幕提供資源。在運行時,系統會根據屏幕布局載入正確尺寸或者精度的圖片。
iPhone的icon設計就這么簡單,iPhone的屏幕只有320×480像素,所以程序沒有適配性問題。
參考文章:
《Icon Design Guidelines, Android 2.0》
《iPhone human interface guidelines》
本文由站酷網-zystoo翻譯,轉載請保留此信息,多謝合作。
D. android studio 怎麼做屏幕適配
不能說是Android Studio怎麼做屏幕適配,而應該是Android怎麼做屏幕適配
屏幕適配需要多方面來配合才能實現
1、針對手機、平板做不同的XML布局設計 ,如:layout、layout-large
2、解析度不同的,對於圖片也需要不同,讓美工給你做合適的圖,如:mipmap-hdpi、mipmap-xhdpi
3、對針不同設置,字體大小設計也不同,如:values-hdpi、values-hdpi
以上這幾種配合使用,基本可以達到屏幕適配的目的,這個需要使用不同設置進行測試,然後根據情況進行調整
E. Android UI閫傞厤鎬葷粨涔嬪浘鐗囬傞厤錛1錛
鐢變簬Android鐨勫睆騫曞昂瀵哥殑紕庣墖鍖栵紝鏃惰嚦浠婃棩Android鐨刄I閫傞厤渚濈劧鏄寮鍙戜腑蹇呬笉鍙灝戠殑姝ラゃ
UI閫傞厤鐨勯傞厤錛屾槸閫氳繃dp銆佹潈閲嶏紝閫氶厤絎︾瓑鏂瑰紡浣縑iew鑳芥寜鎴戜滑鎰忔効鐨勫噯紜鐨勬樉紺哄湪涓嶅悓鎵嬫満涓娿傞櫎浜嗗箆iew鐨勫昂瀵擱傞厤錛屾垜浠榪樿佸瑰浘鐗囬傞厤錛屽悎閫傜殑鎶婂垏鍥炬斁鍦ㄦg『鐨勪綅緗錛岃兘鏈夋晥鐨勯檷浣庡唴瀛樺崰鐢ㄥ拰鍥劇墖鍙樺艦銆
棣栧厛錛屽噯澶囦竴寮200*200鍍忕礌鐨勫浘鐗囷紙img.jpg錛夋斁鍦ˋndroid Studio (浠ヤ笅綆縐癆S)鐨刣rawable鏂囦歡鐩褰曚笅,
鐒跺悗瀵規瘮涓嶅悓drawable鍦ㄤ笉鍚屾墜鏈猴紙dpi錛変笅錛屽浘鐗囩殑澶у皬銆
Android涓鍥劇墖榛樿ょ被鍨嬫槸AEGB_8888錛屾晠width*height 4=鍗犵敤鍐呭瓨澶у皬(B)
閫氳繃鏌ョ湅AS涓鐨刾rofiler鏌ョ湅鍐呭瓨鍗犵敤錛
MI 4 (MIUI10銆1980*1080銆亁xhdpi銆480dpi)褰撲笉鍔犺澆鍥劇墖鏃剁殑鍒濆嬪唴瀛樹負 23.6 *
MZ 6p錛團lyme7銆1920*1080銆 xxhdpi銆480dpi錛夊綋涓嶅姞杞藉浘鐗囩殑鍒濆嬪唴瀛樹負 41.4
PS錛氭暡榛戞澘錛屼粩緇嗙湅鍙傛暟鐨勫悓瀛︿竴瀹氬彂鐜頒簡璁$畻鐨勫唴瀛樺崰鐢ㄥ拰瀹為檯鍐呭瓨鍗犵敤瀵逛笉涓婏紝鍦ㄥ皬綾4涓鐢氳嚦鍑虹幇浜嗗姞杞藉浘鐗囧唴瀛樺弽鑰屽彉灝忕殑鎯呭喌銆傘傘傘
鍘熷洜鍛錛
鎴戜篃涓嶇煡閬撱傛湁鐭ラ亾鐨勫悓瀛﹁鋒寚鏁欍
涓嶈繃鎴戜滑鐨勯噸鐐逛笉鍦ㄥ兼槸鍚︽g『錛岃屾槸鏀懼湪涓嶅悓dpi鐩褰曚笅瀵瑰唴瀛樺獎鍝嶇殑瓚嬪娍錛屽逛笉錛佸規瘮涓婇潰琛ㄦ牸鍐呯殑鍐呭瓨鍗犵敤鍩烘湰涔熺﹀悎涓嬪浘鐨勬瘮渚嬶紙2 3 4 6 8錛夈
鍥劇墖閫傞厤鍒拌繖閲屽凡緇忕粨鏉熶簡銆
綆鍗曟葷粨涓嬶細 鎶婃g『鐨勫垏鍥炬斁鍦ㄦg『鐨刣pi鏂囦歡鐩褰曪紝鑳芥湁鏁堢殑瑙e喅寮鍙戜腑鍙鑳介亣鍒扮殑鍥劇墖鍐呭瓨鍗犵敤榪囧ぇ鍜屾樉紺哄昂瀵鎬笉姝g『鎯呭喌錛