本文基于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差异报告解读相关推荐

  1. 自定义控件android.r,Android控件架构与自定义控件

    前言 最近在开发的路上越走越远了,每天在看各位大神公众号更新内容是自定义View的时候,一些小的内容有点模具,决定回过头来温习一下过往的内容.此篇也是根据android群英传来总结的一篇文章. 1 A ...

  2. Android R(11)文件读写适配

    首先来一张适配完成后,申请权限的页面,点击打开即可: AndroidManifest.xml权限申请: <uses-permission android:name="android.p ...

  3. Android 2.2 r1 API 中文文档系列(11) —— RadioButton

    一.结构 public class RadioButton extends CompoundButton java.lang.Object    android.view.View          ...

  4. Android R 11 后台定位权限没有 始终允许选项的解决方法

    在接入百度定位SDK 时,看到文档上说要注意android 11的权限相关问题,果然是个坑,在Android 10 11 上都出现一些问题,本文记录解决 android 11 定位权限问题的方法 申请 ...

  5. Android日志[进阶篇]五-阅读错误报告

    Android日志[进阶篇]一-使用 Logcat 写入和查看日志 Android日志[进阶篇]二-分析堆栈轨迹(调试和外部堆栈) Android日志[进阶篇]三-Logcat命令行工具 Androi ...

  6. Android SDK各个版本API的特性及兼容性(Dalvik/ART)

    Android最新support包v4,v7,v13,v14,v17等 - http://download.csdn.net/download/u012808234/9502763 Android A ...

  7. Android Setting 日期相关API,自定义DatePicker

    最近在做Setting日期相关的工作,整理一下相关的API(相关代码源自Android 8.0高通代码) 注意:以下API来自Setting,使用的地方也在Setting中,如果其他非系统应用使用,可 ...

  8. Android 9 功能和 API

    声明:本篇文章转载自https://developer.android.google.cn/about/versions/pie/android-9.0 简介 Android 9(API 级别 28) ...

  9. 转 : Squareup刷卡器,音频读卡识别android/iOS源码API

    转  :   Squareup刷卡器,音频读卡识别android/iOS源码API 相信很多人已经见过squareup的读卡器了,银行磁卡在该读卡器上一刷,则能从手机中获取银行卡磁道的信息. Squa ...

最新文章

  1. 建立一个按年龄排序的有序链表,每个结点包括学号、姓名、性别、年龄。建立一个新的结点,通过年龄将此结点插入到链表中去,使之仍然有序
  2. overflow的量两种模式
  3. JVM、GC看这一篇就够了!
  4. 数据库面试 - 如何设计可以动态扩容缩容的分库分表方案?
  5. 解决Linux系统find: ‘/run/user/1000/gvfs’: 权限不够
  6. Flask自定义时间过滤器
  7. ppt格式刷快捷键_为什么别人PPT做的比你快?因为你没掌握这些!
  8. 网络 计算机网络预备知识
  9. 富文本编辑器防xss攻击
  10. MSF利用宏病毒感染word文档获取shell复现
  11. 虚拟的云xx经济越热闹,现实的自己就越孤独
  12. HTML让文字在图片上显示
  13. socket的基本使用
  14. 安装出现Kernel not compiled with GPU support
  15. CSS基础知识汇总{主要内容: CSS语法结构,类选择器,后代选择器,交集选择器等}
  16. MySQL中B+树索引,聚簇索引,二级索引,辅助索引,回表,索引生效条件
  17. LPspice 电路仿真软件
  18. php 生成微信小程序码(可携带参数) 永久有效,数量暂无限制
  19. 写论文第二步——管理文献 上(文献管理软件)
  20. 力扣908. 最小差值 I

热门文章

  1. poj 1966 Cable TV Network
  2. IPv4和IPv6的互操作性
  3. python字典、集合
  4. 服务器离家出走怎么修复,婚姻修复指南:教你如何挽回离家出走的老婆,最重要的是你...
  5. 伽马分布与 贝塔分布
  6. 利用Blender建立基础汽车模型
  7. Response解析
  8. 入门图形学:VR畸变后处理
  9. 机器学习100天(二十):020 分类模型评价指标-PR曲线
  10. C# AttributeUsage的使用浅析