本文的翻译是专门为“ Android-developer”课程的学生准备的。 基础课程 。 “ 我们还提醒您,我们将继续注册高级课程“ Specialization Android-developer”
我们处于Android开发的第十年(Android Q必须为10.0版)。 根据Beta 4,Android Q正式具有
29级API 。 尽管已经存在
Beta 5 ,并且有望推出Beta 6,但该API已被标记为最终版本,现在是时候看看Android Q将如何影响应用程序以及需要进行哪些更改才能完全支持AndroidQ。
Android Q中显示的重要更改(不是全部)可以分为两类:a)
保密性和安全性 ,b)
用户体验 。
译者的话:“我们将翻译分为与这些类别相对应的两部分。 因此,在第一部分中,我们将讨论隐私和安全性。”1)机密性和安全性
a)开始后台活动
当您的应用程序在后台时,您将无法再启动活动。
- 影响因素:所有在Q上运行的应用程序(与目标SDK无关)。 如果Android Q是应用程序的目标版本,则会引发异常;否则,将抛出异常。 如果Android Q不是该应用程序的目标SDK,那么Activity就不会启动,但它可以在装有Android Q的设备上运行。
- 例外:绑定服务,例如可访问性,自动完成等。如果应用程序从系统接收到
PendingIntent
,则可以使用它来启动Activity。 如果该应用程序具有SYSTEM_ALERT_WINDOW
权限(在Android GO中已删除)或最近为Activity调用finish()
的应用程序finish()
建议不要依赖它。“最近”可能非常含糊),则您的应用程序不受此限制。 - 推荐方法:通知触发活动
val fullScreenIntent = Intent(this, CallActivity::class.java) val fullScreenPendingIntent = PendingIntent.getActivity(this, 0, fullScreenIntent, PendingIntent.FLAG_UPDATE_CURRENT) val notificationBuilder = NotificationCompat.Builder(this, CHANNEL_ID) .... .setPriority(NotificationCompat.PRIORITY_HIGH) .setCategory(NotificationCompat.CATEGORY_CALL) .setFullScreenIntent(fullScreenPendingIntent, true)
将
Fullscreen PendingIntent
添加到通知中。 通知已生效,系统将启动全屏Intent。
因此,如果我们要从后台启动Activity,请首先创建一个通知,该通知将显示给用户。 在此通知中,添加
Fullscreen PendingIntent
。 另外,将
USE_FULL_SCREEN_INTENT
权限添加到清单中。 通知已生效,系统将启动全屏Intent。
- 陷阱:系统决定何时显示通知以及何时显示活动。 如果用户正在使用设备,则会显示一个弹出通知。 如果设备处于静止状态或当用户与通知交互时,将启动全屏活动。 例如,如接听电话时(使用电话时弹出通知,否则全屏活动)。
b)硬件标识符
Android Q已撤消了对不可重置的设备标识符的访问。
- 影响因素:所有在Q上运行的应用程序(与目标SDK无关)。 如果Q是目标SDK,则抛出异常。 如果目标SDK小于Q,则返回
null
- 避免: Mac地址现在是随机的,并且IMEI(
TelephonyManager.getDeviceId()
)和序列号不再可用。 现在,它们是“特权权限”,并且仅可用于操作员应用程序。 - 推荐的方法:使用可重置的标识符,例如广告ID,实例ID或全局唯一ID(GUID)。 有关在这种情况下使用哪个标识符的更多信息,请参见唯一标识符的最佳做法 。
c)位置的背景定义
从Android Q开始,系统将区分在前台和后台发出的位置请求。
现在,访问该位置的权限请求将具有3个选项:始终允许,仅在使用该应用程序时允许(仅在前台访问)和拒绝(没有访问权)。
- 它会影响什么:它取决于目标SDK。 如果Q是应用程序的目标SDK,则需要在后台请求新的位置许可。 如果应用程序具有其他目标SDK,则如果它已经对该位置具有访问权限,它将自动获得此权限。
图片取自Android开发者文档- 推荐的方法:如果应用程序需要一次性访问用户的位置来执行某些任务,请使用前台服务,并将前台服务类型参数指定为应用程序清单文件中的
location
。
<service android:name="MyNavigationService" android:foregroundServiceType="location" ... />
如果应用程序需要不断访问设备的位置,例如地理围栏,它可以配置一个请求以允许在后台访问该位置。 该应用程序的其他方面(例如,如何提取和使用位置)无需更改。 要请求访问后台位置,请向清单添加
ACCESS_BACKGROUND_LOCATION
权限:
<manifest> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" /> </manifest>
在后台请求位置访问
系统显示的有关在后台访问位置的提醒需要牢记的一些重要事项:在为应用程序授予其在后台访问设备位置的权限后,可以提醒用户,并且像其他任何权限一样,用户可以撤消该权限。 对于其中Q不是目标SDK但在具有Android Q的设备上运行的应用程序来说,这尤其重要,因为如果具有位置许可,它将获得默认的背景分辨率。 确保您的应用程序可以正常处理此类脚本。 因此,无论何时应用程序启动服务或请求位置,请检查用户是否仍允许应用程序访问位置信息。
至此,本文的第一部分结束了,正如所承诺的,我们将在
第二部分中讨论用户体验。