Android 10 适配攻略,深度解析跳槽从开始到结束完整流程

本文详细介绍了Android 10的适配攻略,包括后台访问位置信息的新权限ACCESS_BACKGROUND_LOCATION,电话、蓝牙、WLAN相关API需要精确位置权限的变更,ACCESS_MEDIA_LOCATION权限,以及PROCESS_OUTGOING_CALLS权限的废弃。此外,讨论了Android 10对后台启动Activity的限制,提出了解决方案。文章还深入探讨了深色主题的适配,包括手动和自动适配方法,以及如何监听和判断深色主题的开启状态。适配Android 10需要关注权限管理和用户体验的改进。
摘要由CSDN通过智能技术生成

应用在卸载后,会将App-specific目录下的数据删除,如果在AndroidManifest.xml中声明:android:hasFragileUserData="true"用户可以选择是否保留。

对于SAF的使用,可以查看我之前写的SAF使用攻略,这里就不展开说了。

最后这里有一个介绍Scoped Storage的视频,推荐观看:

准备好使用分区存储 | ADS 中文字幕视频

准备好使用分区存储

2.权限变化

=================================================================

从6.0开始,基本每次都会有权限方面变动,这次也不例外。(前几天发布了Android 11的预览版,看来也有权限方面的变化。。。单次权限即将到来)

1.在后台运行时访问设备位置信息需要权限

Android 10 引入了 ACCESS_BACKGROUND_LOCATION 权限(危险权限)。

该权限允许应用程序在后台访问位置。如果请求此权限,则还必须请求ACCESS_FINE_LOCATION 或 ACCESS_COARSE_LOCATION权限。只请求此权限无效果。

在Android 10的设备上,如果你的应用的 targetSdkVersion < 29,则在请求ACCESS_FINE_LOCATION 或ACCESS_COARSE_LOCATION权限时,系统会自动同时请求ACCESS_BACKGROUND_LOCATION。在请求弹框中,选择“始终允许”表示同意后台获取位置信息,选择“仅在应用使用过程中允许”或"拒绝"选项表示拒绝授权。

如果你的应用的 targetSdkVersion >= 29,则请求ACCESS_FINE_LOCATION 或 ACCESS_COARSE_LOCATION权限表示在前台时拥有访问设备位置信息的权。在请求弹框中,选择“始终允许”表示前后台都可以获取位置信息,选择“仅在应用使用过程中允许”只表示拥有前台的权限。

总结一下就是下图:

在这里插入图片描述

其实官方不推荐你使用申请后台访问权的方式,因为这样的结果无非就是多请求一个权限,那么这像变更还有什么意义?申请过多的权限,也会造成用户的反感。所以官方推荐使用前台服务来实现,在前台服务中获取位置信息。

  • 首先在清单中对应的service中添加 android:foregroundServiceType=“location”:

<service

android:name=“MyNavigationService”

android:foregroundServiceType=“location” … >

  • 启动前台服务前检查是否具有前台的访问权限:

boolean permissionApproved = ActivityCompat.checkSelfPermission(this,

Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED;

if (permissionApproved) {

// 启动前台服务

} else {

// 请求前台访问位置权限

}

如此一来就可以在Service中获取位置信息。

2.一些电话、蓝牙和WLAN的API需要精确位置权限

下面列举了Android 10中必须具有 ACCESS_FINE_LOCATION 权限才能使用类和方法:

  • 电话

TelephonyManager

getCellLocation()

getAllCellInfo()

requestNetworkScan()

requestCellInfoUpdate()

getAvailableNetworks()

getServiceState()

TelephonyScanManager

requestNetworkScan()

TelephonyScanManager.NetworkScanCallback

onResults()

PhoneStateListener

onCellLocationChanged()

onCellInfoChanged()

onServiceStateChanged()

  • WLAN

WifiManager

startScan()

getScanResults()

getConnectionInfo()

getConfiguredNetworks()

WifiAwareManager

WifiP2pManager

Wifi

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值