安卓8.0和9.0的区别是什么(Android 8.0 和 Android 9.0 权限差异)
Android 8.0 和 Android 9.0 权限差异
一、概述
1.1 Android 8.0
Android 8.0(也称为Android Oreo)引入了一些新的权限模型,以提高用户对应用程序权限的控制。以下是Android 8.0中的一些重要权限差异:
- 后台定位权限: 在Android 8.0之前,应用程序可以在后台持续获取用户位置信息。然而,在Android 8.0中,后台定位权限被限制为仅在应用程序处于前台时可用。这意味着应用程序需要在后台使用位置信息时需要获取额外的权限。
- 安装应用权限: 在Android 8.0之前,应用程序可以自动安装其他应用程序,而无需用户确认。但在Android 8.0中,安装应用权限被限制为仅允许用户手动确认安装。
- 电话权限: 在Android 8.0之前,应用程序可以读取和拨打电话。然而,在Android 8.0中,读取和拨打电话权限被分为两个不同的权限:READ_PHONE_STATE和CALL_PHONE。这意味着应用程序需要分别请求这两个权限。
- 短信权限: 在Android 8.0之前,应用程序可以读取和发送短信。然而,在Android 8.0中,读取和发送短信权限被分为两个不同的权限:READ_SMS和SEND_SMS。这意味着应用程序需要分别请求这两个权限。
- 文件访问权限: 在Android 8.0之前,应用程序可以访问设备上的任何文件。然而,在Android 8.0中,文件访问权限被限制为仅允许应用程序访问其私有目录和共享目录。
这些是Android 8.0中一些重要的权限差异。开发人员需要注意这些差异,并相应地更新他们的应用程序以适应新的权限模型。
1.2 Android 9.0
Android 9.0引入了一些新的权限和权限管理机制,与Android 8.0相比有一些差异。下面是Android 9.0中的一些重要权限差异:
- 存储权限变更:在Android 8.0及之前的版本中,应用程序可以直接访问外部存储设备上的任何文件。但在Android 9.0中,应用程序默认只能访问其私有目录。如果应用程序需要访问其他应用程序的文件或共享目录,需要声明READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE权限,并且通过requestLegacyExternalStorage标志来启用旧的存储权限模型。
- 拍照和录像权限:在Android 9.0中,应用程序需要声明CAMERA权限才能访问相机。此外,如果应用程序需要访问麦克风进行录音,还需要声明RECORD_AUDIO权限。这些权限的变更增加了用户对相机和麦克风的控制。
- 电话权限变更:在Android 9.0中,应用程序需要声明CALL_PHONE权限才能直接拨打电话。此外,应用程序还需要声明READ_PHONE_STATE权限才能读取设备的电话状态。这些权限的限制提高了用户对通话功能的控制。
- 位置权限变更:在Android 9.0中,应用程序需要声明ACCESS_FINE_LOCATION或ACCESS_COARSE_LOCATION权限才能访问设备的位置信息。此外,应用程序还需要声明ACCESS_BACKGROUND_LOCATION权限才能在后台访问位置信息。这些权限的变更增加了用户对位置信息的控制。
- 传感器权限变更:在Android 9.0中,应用程序需要声明BODY_SENSORS权限才能访问设备的传感器数据。这个权限的变更增加了用户对敏感数据访问的控制。
总结来说,Android 9.0对一些重要权限进行了变更,增加了用户对设备功能的控制。开发者在开发应用程序时需要注意这些权限的变更,并在应用程序的清单文件中正确声明和请求这些权限,以确保应用程序在Android 9.0及更高版本上能够正常运行。
二、 后台定位权限
2.1 Android 8.0
Android 8.0引入了一项新的权限限制,即后台定位权限。在Android 8.0及更高版本中,如果应用需要在后台持续进行定位操作,就必须请求后台定位权限。这个权限是属于危险权限的一种,需要经过用户的授权才能使用。
在Android 8.0之前的版本中,应用可以在后台持续进行定位操作而不需要额外的权限。但是在Android 8.0及更高版本中,如果应用没有请求后台定位权限,那么在应用进入后台后,定位操作将会被停止。
为了请求后台定位权限,开发者需要在清单文件中声明
ACCESS_BACKGROUND_LOCATION权限,并且在运行时请求该权限。用户在安装或升级应用时,会被提示是否允许应用请求后台定位权限。
下表总结了Android 8.0和Android 9.0在后台定位权限方面的差异:
版本 | 后台定位权限 |
Android 8.0 | 引入了后台定位权限,应用需要请求该权限才能在后台持续进行定位操作。 |
Android 9.0 | 没有对后台定位权限进行改变,仍然需要请求后台定位权限才能在后台持续进行定位操作。 |
这个例子中,我们可以看到Android 8.0引入了后台定位权限的概念,开发者需要在清单文件中声明并请求该权限,以便在应用进入后台后能够继续进行定位操作。而在Android 9.0中,后台定位权限的要求没有改变,仍然需要请求该权限才能进行后台定位。
2.2 Android 9.0
Android 9.0引入了一些新的变化和限制,特别是在后台定位权限方面。在Android 8.0中,应用程序可以在后台持续获取位置信息,而在Android 9.0中,这种行为受到了更严格的限制。
在Android 9.0中,应用程序需要满足以下条件才能在后台获取位置信息:
- 用户授予了应用程序后台定位权限。
- 应用程序正在运行一个前台服务,该服务与位置相关。
- 应用程序具有FOREGROUND_SERVICE权限。
这意味着,如果应用程序没有满足上述条件,它将无法在后台获取位置信息。这是为了保护用户的隐私和减少不必要的电池消耗。
以下是一个具体示例,说明了Android 9.0中后台定位权限的变化:
- 用户在Android 8.0上安装了一个天气应用,并授予了后台定位权限。这意味着该应用可以在后台持续获取位置信息,并在前台和后台都能提供天气预报。
- 当用户升级到Android 9.0时,该应用程序仍然可以在前台获取位置信息,但在后台获取位置信息的能力受到了限制。现在,该应用程序必须满足上述条件才能在后台获取位置信息。
- 如果该应用程序没有满足上述条件,它将无法在后台获取位置信息。这意味着用户在该应用程序没有打开的情况下,它将无法提供实时的天气预报。
这个示例说明了Android 9.0对后台定位权限的限制,以保护用户的隐私和减少电池消耗。
3. 通知权限
3.1 Android 8.0
Android 8.0引入了通知渠道的概念,允许应用程序对通知进行分类和分组。每个通知渠道都有一个唯一的ID,开发者可以通过设置通知渠道的重要性级别来控制通知的优先级。在应用程序中创建通知时,需要指定通知渠道ID,以确保通知被正确地分类和显示。
例如,假设我们有一个社交媒体应用程序,需要发送两种类型的通知:新消息通知和推送通知。在Android 8.0之前的版本中,这两种通知将被混合在一起显示,用户无法区分它们。但是在Android 8.0及更高版本中,我们可以创建两个不同的通知渠道:一个用于新消息通知,另一个用于推送通知。通过设置新消息通知的重要性级别为高,推送通知的重要性级别为默认,我们可以确保新消息通知会更突出地显示给用户,而推送通知则不会打扰用户。
下表总结了Android 8.0和Android 9.0之间通知渠道的差异:
Android 8.0 | Android 9.0 | |
通知渠道设置 | 通过NotificationChannel API | 通过NotificationChannel API |
通知分类 | 可以创建多个通知渠道 | 可以创建多个通知渠道 |
通知优先级 | 可以设置通知的重要性级别 | 可以设置通知的重要性级别 |
通过使用通知渠道,开发者可以更好地控制和管理通知,提供更好的用户体验。
3.2 Android 9.0
Android 9.0引入了一些新的通知权限,以提供更好的用户控制和隐私保护。以下是Android 9.0中的一些通知权限差异:
- 通知渠道:Android 9.0引入了通知渠道的概念,允许应用程序将通知分组并为每个通知组设置不同的优先级和声音。这使用户可以更好地管理和控制通知的显示方式。
- 通知中断模式:Android 9.0引入了通知中断模式,允许用户根据自己的偏好设置通知的中断级别。用户可以选择在不同的时间段或情景下将通知设置为完全静音、仅显示重要通知或显示所有通知。
- 通知历史记录:Android 9.0允许应用程序访问通知历史记录,以便在用户关闭或删除通知后仍然可以查看通知的内容。这提供了更好的用户体验,使用户可以随时回顾之前的通知。
下表总结了Android 8.0和Android 9.0之间通知权限的差异:
功能 | Android 8.0 | Android 9.0 |
通知渠道 | 不支持 | 支持 |
通知中断模式 | 不支持 | 支持 |
通知历史记录 | 不支持 | 支持 |
通过引入这些新的通知权限,Android 9.0提供了更多的灵活性和个性化选项,使用户能够更好地控制和管理他们的通知。
四、安装未知来源应用权限
4.1 Android 8.0
4.1.1 Android 8.0
在Android 8.0(Oreo)中,引入了一个新的权限控制机制,即“安装未知来源应用权限”。这个权限控制了用户是否允许安装来自于未知来源的应用。在Android 8.0之前的版本中,用户只需要在设置中勾选“未知来源”选项,即可允许安装来自于未知来源的应用。但是在Android 8.0中,用户需要为每个应用程序单独授予“安装未知来源应用权限”。
在Android 8.0中,用户可以通过以下步骤来授予或撤销某个应用程序的“安装未知来源应用权限”:
- 打开设备的设置应用程序。
- 点击“应用和通知”选项。
- 点击“特定应用”选项。
- 选择要授予或撤销权限的应用程序。
- 点击“权限”选项。
- 找到“安装未知来源应用”权限,并进行授予或撤销操作。
通过这个新的权限控制机制,Android 8.0增强了对用户设备的安全性和隐私保护。用户可以更加细致地控制哪些应用程序可以安装来自于未知来源的应用,从而减少了潜在的风险和安全威胁。
4.1.2 Android 9.0
在Android 9.0(Pie)中,对于“安装未知来源应用权限”的控制方式和Android 8.0有所不同。在Android 9.0中,用户可以通过以下步骤来授予或撤销某个应用程序的“安装未知来源应用权限”:
- 打开设备的设置应用程序。
- 点击“应用和通知”选项。
- 点击“特定应用”选项。
- 选择要授予或撤销权限的应用程序。
- 点击“高级”选项。
- 找到“安装未知来源应用”权限,并进行授予或撤销操作。
与Android 8.0相比,Android 9.0在控制“安装未知来源应用权限”的方式上做了一些改进。在Android 9.0中,将“安装未知来源应用”权限放置在了“高级”选项中,更加直观和方便用户进行控制。同时,Android 9.0也增加了一些新的安全特性,提供了更加安全的应用程序安装环境,保护用户设备的安全和隐私。
通过对比Android 8.0和Android 9.0中的“安装未知来源应用权限”控制方式,我们可以看到Android系统在不同版本中对权限控制的改进和优化,不断提升用户设备的安全性和隐私保护。
4.2 Android 9.0
4.2.1 Android 9.0 限制了安装未知来源应用的权限名称
在Android 9.0中,限制了安装未知来源应用的权限名称,这是为了增加用户对应用来源的控制和安全性。在Android 9.0之前的版本中,用户只需要在系统设置中打开“未知来源应用”选项,就可以安装来自任何来源的应用。然而,在Android 9.0中,用户需要为每个应用单独授予安装未知来源应用的权限。
4.2.2 Android 9.0 中的安装未知来源应用权限示例
在Android 9.0中,用户在安装未知来源应用时会遇到以下示例情况:
- 用户在下载应用时,系统会弹出一个对话框,提示用户该应用来自未知来源,并要求用户授予安装未知来源应用的权限。
- 用户点击允许后,系统会跳转到应用权限管理界面,用户需要手动为该应用授予安装未知来源应用的权限。
- 用户可以在应用权限管理界面中查看和管理已授予的权限,包括安装未知来源应用的权限。
- 如果用户不授予安装未知来源应用的权限,系统将不允许安装该应用,并提示用户修改权限设置。
通过以上示例,可以看出在Android 9.0中,安装未知来源应用的权限变得更加严格和细化,用户需要逐个授予应用安装未知来源应用的权限,增加了对应用来源的控制和安全性。
五、权限请求方式
5.1 Android 8.0
5.1 Android 8.0
Android 8.0引入了一种新的权限请求方式,即运行时权限。在Android 8.0之前,应用在安装时会一次性请求所有需要的权限,用户只能选择全部接受或全部拒绝。而在Android 8.0中,应用需要在运行时请求权限,即在应用使用相关功能时才会弹出权限请求对话框。这种方式更加灵活,用户可以选择性地授予或拒绝权限。
下面是一个示例,展示了在Android 8.0中如何请求权限:
- 应用需要使用相机功能来拍摄照片。
- 当用户点击拍照按钮时,应用会检查是否有相机权限。
- 如果没有相机权限,应用会弹出权限请求对话框,向用户解释为什么需要相机权限,并请求用户授权。
- 用户可以选择授予或拒绝相机权限。
- 如果用户授予了相机权限,应用可以继续执行拍照操作。
- 如果用户拒绝了相机权限,应用可以根据需要采取相应的措施,例如显示一个提示信息或者禁用拍照功能。
通过运行时权限的方式,Android 8.0提供了更好的用户体验和权限控制。用户可以更加灵活地管理应用的权限,同时应用也可以根据用户的选择来进行相应的操作。
5.2 Android 9.0
5.2 Android 9.0
在Android 9.0中,权限请求方式发生了一些变化。以前的版本中,应用程序需要在运行时请求权限,并且用户需要在安装应用程序时授予所有权限。然而,这种方式可能会导致用户安装应用程序时不愿意授予所有权限的情况发生。为了解决这个问题,Android 9.0引入了一种新的权限请求方式,称为“运行时权限”。
运行时权限允许应用程序在运行时向用户请求单个权限,而不是在安装时请求所有权限。这样,用户可以选择是否授予某个权限,而不是在安装时授予所有权限。这种方式使用户更加可控,并提高了用户对应用程序权限的信任度。
下表总结了Android 8.0和Android 9.0之间的权限请求方式的差异:
Android 8.0 | Android 9.0 | |
请求方式 | 在安装时请求所有权限 | 在运行时请求单个权限 |
用户体验 | 用户需要一次性授予所有权限 | 用户可以选择是否授予某个权限 |
权限控制 | 应用程序需要所有权限才能安装 | 应用程序只需要请求所需权限 |
通过引入运行时权限,Android 9.0提供了更好的用户体验和权限控制。用户可以更加灵活地授予或拒绝某个权限,并且应用程序只需要请求所需的权限,而不需要请求所有权限。这种改变有助于提高用户对应用程序的信任度,并提高应用程序的安全性。
六、 其他权限差异
6.1 Android 8.0
6.1.1 后台定位权限
在Android 8.0中,后台定位权限是一项新的权限,它允许应用在后台持续获取设备的位置信息。这意味着即使应用在后台运行,它仍然可以通过定位服务获取用户的位置数据。然而,在Android 9.0中,后台定位权限被限制了。应用只能在前台获取位置信息,而在后台则无法获取。这是为了保护用户的隐私和减少电池消耗。因此,开发人员需要注意在Android 9.0中使用后台定位权限的限制。
6.1.2 电话权限
在Android 8.0中,应用需要请求电话权限才能读取设备的电话状态和身份识别信息。然而,在Android 9.0中,这个权限被细分为两个权限:READ_PHONE_STATE和READ_CALL_LOG。READ_PHONE_STATE权限允许应用读取设备的电话状态,而READ_CALL_LOG权限允许应用读取设备的通话记录。这样的细分使得应用可以更加精确地请求所需的电话权限,同时也增强了用户对隐私的控制。
6.1.3 存储权限
在Android 8.0中,应用需要请求存储权限才能访问设备的外部存储空间。然而,在Android 9.0中,存储权限被细分为两个权限:READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE。READ_EXTERNAL_STORAGE权限允许应用读取设备的外部存储空间,而WRITE_EXTERNAL_STORAGE权限允许应用写入设备的外部存储空间。这样的细分使得应用可以更加精确地请求所需的存储权限,同时也增强了用户对隐私的控制。
6.1.4 其他权限差异
除了上述提到的权限差异,Android 8.0和Android 9.0还存在其他一些权限差异。例如,Android 8.0引入了一项新的权限:SYSTEM_ALERT_WINDOW,它允许应用在其他应用的上层显示窗口。然而,在Android 9.0中,这个权限被限制了,应用只能在自己的窗口内显示内容。这是为了增强用户对弹窗广告等恶意行为的控制。另外,Android 9.0还引入了一项新的权限:ACCESS_MEDIA_LOCATION,它允许应用访问媒体文件的地理位置信息。这个权限可以帮助应用提供更加精确的地理标记功能。这些权限差异需要开发人员在开发过程中进行注意和适配。
6.2 Android 9.0
6.2 Android 9.0
Android 9.0引入了一些新的权限和权限管理机制,以提高用户对应用程序的控制和隐私保护。以下是Android 9.0与Android 8.0之间的一些其他权限差异:
- READ_PHONE_NUMBERS权限:在Android 8.0中,应用程序需要READ_PHONE_STATE权限才能读取设备的电话号码。然而,在Android 9.0中,这个权限被细分为READ_PHONE_STATE和READ_PHONE_NUMBERS两个权限。READ_PHONE_STATE权限仍然允许应用程序读取设备的电话号码,而READ_PHONE_NUMBERS权限则更加敏感,只允许特定的系统应用程序和持有特定权限的应用程序读取电话号码。
- ACCESS_BACKGROUND_LOCATION权限:在Android 8.0中,应用程序需要ACCESS_FINE_LOCATION或ACCESS_COARSE_LOCATION权限才能访问设备的位置信息。然而,在Android 9.0中,引入了ACCESS_BACKGROUND_LOCATION权限,该权限允许应用程序在后台获取设备的位置信息。这个权限是针对需要在后台持续获取位置信息的应用程序,例如导航应用程序或运动跟踪应用程序。
- MANAGE_EXTERNAL_STORAGE权限:在Android 8.0中,应用程序可以自由地访问设备上的外部存储。然而,在Android 9.0中,引入了MANAGE_EXTERNAL_STORAGE权限,该权限控制应用程序对外部存储的访问权限。如果应用程序没有这个权限,它只能访问自己的私有目录和特定的共享目录。
- REQUEST_INSTALL_PACKAGES权限:在Android 8.0中,应用程序需要PACKAGE_INSTALLER权限才能请求安装其他应用程序。然而,在Android 9.0中,引入了REQUEST_INSTALL_PACKAGES权限,该权限允许应用程序请求安装其他应用程序的权限。这个权限是针对需要动态安装应用程序的应用程序,例如应用商店或下载管理器。
- ACTIVITY_RECOGNITION权限:在Android 8.0中,应用程序可以自由地访问设备的活动识别功能。然而,在Android 9.0中,引入了ACTIVITY_RECOGNITION权限,该权限控制应用程序对活动识别功能的访问权限。如果应用程序没有这个权限,它将无法访问设备的活动识别功能。
总结来说,Android 9.0引入了一些新的权限和权限管理机制,以提高用户对应用程序的控制和隐私保护。这些差异包括READ_PHONE_NUMBERS权限的细分、
ACCESS_BACKGROUND_LOCATION权限的引入、MANAGE_EXTERNAL_STORAGE权限的控制、REQUEST_INSTALL_PACKAGES权限的引入以及ACTIVITY_RECOGNITION权限的控制。这些变化使得开发者需要更加谨慎地处理权限的请求和使用,以提高用户体验和隐私保护。