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‘𨱍呭喌锛