Android R 、Android 11 API 30差异报告解读
本文基于Android开发者网站的API参考和差异报告部分进行应用开发中常用的重点API变化进行解读分析,目的在于了解Android11的API差异,了解Android11新增接口能力的同时适配目前正在使用的接口的变化。
新增部分
Manifest.permission
这部分主要新增了三个权限
1、【新增权限】android.permission.LOADER_USAGE_STATS
该权限用于允许数据加载器读取应用的访问记录(日志),使用方式待确认。
2、【新增权限】android.permission.MANAGE_EXTERNAL_STORAGE
该权限用于允许应用程序访问外部存储空间,参考强制执行分区存储的特性。使用方式参考:所有文件访问权限
3、【新增权限】android.permission.QUERY_ALL_PACKAGES
该权限用于允许查询设备上的所有正常应用程序。参考:查询所有应用及与之交互
Intent
1、【新增ACTION】ACTION_CREATE_REMINDER
Activity的Action,值为“android.intent.action.CREATE_REMINDER”,作用是创建提醒器,同时传入参数EXTRA_TITLE、EXTRA_TEXT、EXTRA_TIME。
修改部分
accessibilityservice
AndroidR上面的辅助功能部分,api修改主要扩展了原有接口,增加了对屏幕displayId的识别监控,同时增加了对手势与触摸的监控区域设置能力等。
1、【新增接口】getAccessibilityButtonController (int displayId)
相比较原来的getAccessibilityButtonController()方法增加了displayId的参数,用于监控特定虚拟显示屏的辅助功能按钮状态。
2、【新增接口】getSystemActions()
返回当前可用系统动作的列表,可以与onSystemActionsChanged()结合使用。
3、【新增回调】onSystemActionsChanged()
当支持的系统操作列表变化的时候得到回调。
4、【新增接口】getWindowsOnAllDisplays ()
相比较原来的getWindows ()接口,该接口可以返回所有显示屏上的可与用户交互的窗口。
5、【修改回调】onGesture (AccessibilityGestureEvent gestureEvent)
原来的onGesture (int gestureId)回调接口在Android 11上被弃用,改为onGesture (AccessibilityGestureEvent gestureEvent)承担其原有功能,当用户执行特定手势操作时,进行回调。
同时,在新增的AccessibilityGestureEvent类内,包含了用户进行手势操作的屏幕(displayId)是哪个的信息,扩展了接口能力。
6、【新增接口】setGestureDetectionPassthroughRegion (int displayId, Region region)
该接口支持设置屏幕的手势检测区域,只监控区域内的手势操作。
7、【新增接口】setTouchExplorationPassthroughRegion (int displayId, Region region)
该接口支持设置屏幕的触摸检测区域,只监控区域内的点触操作。
8、【新增接口】takeScreenshot (int displayId, Executor executor, AccessibilityService.TakeScreenshotCallback callback)
该接口支持截图对应屏幕(displayId)的内容,返回AccessibilityService.ScreenshotResult对象,从而可以进行图片内容识别和处理。
Activity
AndroidR上面的Activity部分,主要新增了画中画PIP进入时的回调接口和Activity标识id设置、透明状态设置两个接口,同时将子Activity页面调用的方法基本全部弃用。
1、【新增回调】onPictureInPictureRequested()
该接口用于在调用enterPictureInPictureMode接口进入画中画模式后系统进行回调通知。
2、【新增回调】setLocusContext (LocusId locusId, Bundle bundle)
该接口用于设置识别同一Activity类的不同实例的标识ID,系统可以在分享、通知、快捷方式等场景用这个标识ID和bundle内容来作为Activity的不同实例之间的排序信号进行优先选择。
3、【新增接口】setTranslucent (boolean translucent)
在AndroidR中提供了该接口用于将具有R.attr.windowIsTranslucent或R.attr.windowIsFloating属性的Activity转化为全屏不透明状态或者将不透明状态转化为透明状态。
4、【弃用接口】关于子Activity的调用接口基本全部弃用
finishActivityFromChild:从子Activity中调用finishActivity
finishFromChild :从子Activity中调用finish
navigateUpToFromChild:从子Activity中导航到特定Intent
onNavigateUpFromChild:当子Activity页面被导航到时得到系统回调。
startActivityFromChild:从子Activity页面执行startActivity接口
startIntentSenderFromChild:从子Activity页面中执行startIntentSender
ActivityManager
在Android R的ActivityManager中,主要增加了进程控制相关的主动触发ANR和获取进程死亡原因的两类功能接口。使用参考:应用进程退出原因
1、【新增接口】appNotResponding (String reason)
该接口主要用于app应用主动触发一个ANR事件。
2、【新增接口】getHistoricalProcessExitReasons (String packageName, int pid, int maxNum)
返回包含应用程序最近死亡记录信息的ApplicationExitInfo的列表,包含了死亡原因和当时的内存状态等信息。
3、【新增接口】isLowMemoryKillReportSupported()
getHistoricalProcessExitReasons返回的进程死亡记录表中是否包含LowMemoryKill的死亡原因的判断方法,true表示支持,false表示不支持。
4、【新增接口】setProcessStateSummary (byte[] state)
该接口用于设置自定义的进程状态数据,主要用于进程死后调用getHistoricalProcessExitReasons返回的进程死亡记录列表中,使用ApplicationExitInfo.getProcessStateSummary ()可以获取之前设置的数据。
ExpandableListActivity弃用
使用RecyclerView 或者 ExpandableListView 进行代替。
IntentService弃用
IntentService会受Android8.0的后台执行限制所限,可以尝试使用WorkManager或者JobIntentService代替它。
ListActivity弃用
AndroidR中弃用了ListActivity,推荐使用ListFragment或者RecyclerView进行代替。其子类包括LauncherActivity和PreferenceActivity也已经弃用了。
Notification
1、【新增接口】findRemoteInputActionPair (boolean requiresFreeform)
查找通知的远程输入和它相应的动作。快捷回复参考:在快速回复中使用富媒体,视频参考:https://sspai.com/post/52473
2、【新增接口】getContextualActions()
返回不在此通知动作列表之内的,根据通知内容上下文建议的动作。特性参考:Android Q/R Smart Suggestions , Section 预研
NotificationManager
1、【新增接口】cancelAsPackage (String targetPackage, String tag, int id)
该接口通常用于取消通过notifyAsPackage发送的其他应用的通知或者自己应用的通知。
2、【新增接口】getConsolidatedNotificationPolicy()
该接口返回当前应用适用的通知策略,如果 getCurrentInterruptionFilter()返回INTERRUPTION_FILTER_ALL全部打断,则该接口返回getNotificationPolicy()的默认的通知策略。
3、【新增接口】getNotificationChannel (String channelId, String conversationId)
相比较原有接口getNotificationChannel (String channelId),该新增接口多了conversationId的参数,主要填ShortcutInfo#getId()的id,具体用途待确认。
NotificationChannel
通知渠道类主要新增了对会话渠道的相关支持。
1、【新增接口】getConversationId()
返回与该通道关联的会话id ShortcutInfo#getId(),参考setConversationId (String parentChannelId, String conversationId).
2、【新增接口】setConversationId (String parentChannelId, String conversationId)
将该通道设置为以会话为中心的通道并且设置会话id
3、【新增接口】getParentChannelId()
如果是会话通道,返回父通知通道的id
4、【新增接口】hasUserSetSound()
返回用户是否有给该通知渠道设置音频
5、【新增接口】isImportantConversation()
该会话通道是否被认为很重要,重要的话视觉上可能会特殊显示
ContentProvider
在AndroidR中,ContentProvider部分主要增加了删除、插入、更新时的结构化查询方法支持,并且开放补齐了部分常用接口。
1、【新增接口】delete (Uri uri, Bundle extras)
在API 30中增加了根据结构化参数Bundle进行删除操作的支持,使用方式可参考API 26增加的结构化查询方法query (Uri uri, String[] projection, Bundle queryArgs, CancellationSignal cancellationSignal)方法的demo示例。
2、【新增接口】insert (Uri uri, ContentValues values, Bundle extras)
在API 30中增加了根据结构化参数Bundle进行插入操作的支持,使用方式可参考API 26增加的结构化查询方法query (Uri uri, String[] projection, Bundle queryArgs, CancellationSignal cancellationSignal)方法的demo示例。
3、【新增接口】update (Uri uri, ContentValues values, Bundle extras)
在API 30中增加了根据结构化参数Bundle进行更新操作的支持,使用方式可参考API 26增加的结构化查询方法query (Uri uri, String[] projection, Bundle queryArgs, CancellationSignal cancellationSignal)方法的demo示例。
4、【新增接口】getCallingPackageUnchecked()
新增接口,相比较原来的getCallingPackage()接口,callingPackage与callingUid不匹配时不会抛出异常。
5、【新增接口】requireContext()
获取Provider运行的非空的Context对象,相比较原有的getContext()接口,该接口若在onCreate之前调用context为空则直接抛出异常。
ContentResolver
1、【新增接口】delete (Uri url, Bundle extras)
在API 30中增加了根据结构化参数Bundle进行删除操作的支持
2、【新增接口】insert (Uri url, ContentValues values, Bundle extras)
在API 30中增加了根据结构化参数Bundle进行插入操作的支持
3、【新增接口】update (Uri uri, ContentValues values, Bundle extras)
在API 30中增加了根据结构化参数Bundle进行更新操作的支持
4、【调整接口】notifyChange (Collection<Uri> uris, ContentObserver observer, int flags)
原有的notifyChange (Uri uri, ContentObserver observer, boolean syncToNetwork)接口在API 30中被弃用,替换成了目前这个三参数接口,从参数上可以看出相比较原来做了扩展。支持通知多个uri的变更。
Context
1、【新增接口】bindServiceAsUser (Intent service, ServiceConnection conn, int flags, UserHandle user)
在API 30中放开了跨用户进行bindService调用的接口,该接口的最后一个参数user即为绑定到对应用户的服务。
2、【新增接口】sendBroadcastWithMultiplePermissions (Intent intent, String[] receiverPermissions)
该接口支持校验receiver必须具有多个权限才可以接收该广播
3、【弃用接口】getExternalMediaDirs ()
该接口从API 30开始弃用,鼓励使用MediaStore进行文件操作,参考:媒体文件访问权限
PackageManager
PackageManager主要调整了获取安装来源信息的接口,将信息封装到了InstallSourceInfo对象内
1、【调整接口】getInstallSourceInfo (String packageName)
该接口用于检索应用程序的安装来源信息,相比较API 30中弃用的旧接口getInstallerPackageName (String packageName),该接口返回一个InstallSourceInfo对象,该对象内包含一次安装的各阶段来源信息。
2、【新增接口】isDefaultApplicationIcon (Drawable drawable)
该接口用于检查PackageManager返回的是否是一个默认的应用程序Icon,一般来说通过getApplicationIcon (ApplicationInfo info)获取Icon时,应用没有设置Icon或者加载Icon时系统发生错误等场景都可能导致返回默认图标。
Resources
API 30中增加了资源加载器的特性,参考Android特性中关于资源加载器的描述
1、【新增接口】addLoaders (ResourcesLoader... loaders)
增加资源加载器ResourcesLoader到加载器列表中,资源加载器用于提供ResourcesProvider给Resources,ResourcesProvider可以用于从apk和资源表中加载资源数据。
2、【新增接口】removeLoaders (ResourcesLoader... loaders)
将资源加载器ResourcesLoader从加载器列表中移除。
Configuration
【新增接口】isNightModeActive()
返回当前Configuration是否是深色模式状态
ContentObserver
在API 30中,ContentObserver主要增加了对多Uir同时通知或者监听的能力
1、【新增接口】dispatchChange (boolean selfChange, Uri uri, int flags)
相比较现有的dispatchChange (boolean selfChange, Uri uri)方法,新接口增加了flags的支持,可以设置变更类型信息,详细信息见官网
2、【新增接口】dispatchChange (boolean selfChange, Collection<Uri> uris, int flags)
相比较现有的dispatchChange (boolean selfChange, Uri uri)方法,新接口增加了同时通知多个uir以及类型flags的支持,详细信息见官网
3、【新增回调】onChange (boolean selfChange, Uri uri, int flags)
相比较现有的onChange (boolean selfChange)和onChange (boolean selfChange, Uri uri)接口,新接口增加了flags的支持,可以设置变更类型信息,app需要注意实现所有重载方法,详细信息见官网
4、【新增回调】onChange (boolean selfChange, Collection<Uri> uris, int flags)
相比较现有的onChange (boolean selfChange)和onChange (boolean selfChange, Uri uri)接口,新接口增加了同时通知多个uir以及类型flags的支持,app需要注意实现所有重载方法,详细信息见官网
AsyncTask弃用
在API 30中,android将AsyncTask置为弃用状态,推荐使用标准 java.util.concurrent包或者Kotlin concurrency utilities代替。理由是该类通常在UI线程中使用,但是在配置改变的时候会导致Context泄露、回调丢失或者崩溃等问题,它还在不同平台版本上具有不一致的行为,并且相比较直接使用Executors并没有更加有效率。
FileUtils
1、【弃用接口】closeQuietly (AutoCloseable closeable)
该接口静默关闭给定对象,忽略所有异常,google认为不应该底层直接忽略该异常,close抛出的异常与写入抛出异常同等重要。
2、【弃用接口】closeQuietly (FileDescriptor fd)
该接口静默关闭给定对象,忽略所有异常,google认为不应该底层直接忽略该异常,close抛出的异常与写入抛出异常同等重要。
Handler
1、【弃用构造方法】Handler ()
在API 30中Handler的两个不带Looper的构造函数都被弃用,避免潜在风险,保留的构造函数为Handler (Looper looper)和Handler (Looper looper, Handler.Callback callback)
2、【弃用构造方法】Handler (Handler.Callback callback)
在API 30中Handler的两个不带Looper的构造函数都被弃用,避免潜在风险,保留的构造函数为Handler (Looper looper)和Handler (Looper looper, Handler.Callback callback)
IBinder
【新增接口】getSuggestedMaxIpcSizeBytes ()
获取建议IPC传输的最大字节大小
TimeUtils
【新增接口】isTimeBetween (LocalTime reference, LocalTime start, LocalTime end)
该方法用于判断某个时钟时间是否在两个时钟时间之间。
Android R 、Android 11 API 30差异报告解读相关推荐
- 自定义控件android.r,Android控件架构与自定义控件
前言 最近在开发的路上越走越远了,每天在看各位大神公众号更新内容是自定义View的时候,一些小的内容有点模具,决定回过头来温习一下过往的内容.此篇也是根据android群英传来总结的一篇文章. 1 A ...
- Android R(11)文件读写适配
首先来一张适配完成后,申请权限的页面,点击打开即可: AndroidManifest.xml权限申请: <uses-permission android:name="android.p ...
- Android 2.2 r1 API 中文文档系列(11) —— RadioButton
一.结构 public class RadioButton extends CompoundButton java.lang.Object android.view.View ...
- Android R 11 后台定位权限没有 始终允许选项的解决方法
在接入百度定位SDK 时,看到文档上说要注意android 11的权限相关问题,果然是个坑,在Android 10 11 上都出现一些问题,本文记录解决 android 11 定位权限问题的方法 申请 ...
- Android日志[进阶篇]五-阅读错误报告
Android日志[进阶篇]一-使用 Logcat 写入和查看日志 Android日志[进阶篇]二-分析堆栈轨迹(调试和外部堆栈) Android日志[进阶篇]三-Logcat命令行工具 Androi ...
- Android SDK各个版本API的特性及兼容性(Dalvik/ART)
Android最新support包v4,v7,v13,v14,v17等 - http://download.csdn.net/download/u012808234/9502763 Android A ...
- Android Setting 日期相关API,自定义DatePicker
最近在做Setting日期相关的工作,整理一下相关的API(相关代码源自Android 8.0高通代码) 注意:以下API来自Setting,使用的地方也在Setting中,如果其他非系统应用使用,可 ...
- Android 9 功能和 API
声明:本篇文章转载自https://developer.android.google.cn/about/versions/pie/android-9.0 简介 Android 9(API 级别 28) ...
- 转 : Squareup刷卡器,音频读卡识别android/iOS源码API
转 : Squareup刷卡器,音频读卡识别android/iOS源码API 相信很多人已经见过squareup的读卡器了,银行磁卡在该读卡器上一刷,则能从手机中获取银行卡磁道的信息. Squa ...
最新文章
- 建立一个按年龄排序的有序链表,每个结点包括学号、姓名、性别、年龄。建立一个新的结点,通过年龄将此结点插入到链表中去,使之仍然有序
- overflow的量两种模式
- JVM、GC看这一篇就够了!
- 数据库面试 - 如何设计可以动态扩容缩容的分库分表方案?
- 解决Linux系统find: ‘/run/user/1000/gvfs’: 权限不够
- Flask自定义时间过滤器
- ppt格式刷快捷键_为什么别人PPT做的比你快?因为你没掌握这些!
- 网络 计算机网络预备知识
- 富文本编辑器防xss攻击
- MSF利用宏病毒感染word文档获取shell复现
- 虚拟的云xx经济越热闹,现实的自己就越孤独
- HTML让文字在图片上显示
- socket的基本使用
- 安装出现Kernel not compiled with GPU support
- CSS基础知识汇总{主要内容: CSS语法结构,类选择器,后代选择器,交集选择器等}
- MySQL中B+树索引,聚簇索引,二级索引,辅助索引,回表,索引生效条件
- LPspice 电路仿真软件
- php 生成微信小程序码(可携带参数) 永久有效,数量暂无限制
- 写论文第二步——管理文献 上(文献管理软件)
- 力扣908. 最小差值 I