返回
解锁 Android 11 的潜能:全方位适配指南
Android
2023-12-15 15:06:37
拥抱 Android 11:全面适配实践指南
目标 SDK 版本适配
Android 11 带来了一系列激动人心的变化,促使开发者对其应用程序进行适配。针对 Android 11 及更高版本(targetSdkVersion>=30)开发的应用程序必须遵守新规则:
- 权限请求: 告别旧的许可方式,Android 11 引入了新的权限请求模型,要求用户在安装应用程序时明确授予特定权限。开发者必须更新其代码,以适应这一机制。
if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, REQUEST_CAMERA_PERMISSION);
}
- 存储权限: 外部存储访问的时代已经一去不复返了。Android 11 限制了对外部存储的访问,开发者必须采用文件访问 API 访问特定文件和目录,并根据用户的授权权限进行响应。
// 请求文件访问权限
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("*/*");
startActivityForResult(intent, REQUEST_FILE_ACCESS);
- 后台位置访问: 现在,后台位置访问需要得到用户的明确许可。开发者必须在应用程序中实现后台位置访问权限请求机制。
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_BACKGROUND_LOCATION) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_BACKGROUND_LOCATION}, REQUEST_BACKGROUND_LOCATION_PERMISSION);
}
Android 11 新特性集成
Android 11 带来了一系列令人兴奋的新特性,可以显著增强应用程序体验:
- 通知气泡: 与用户保持联系变得更加便捷!通知气泡允许应用程序在不干扰用户的情况下提供重要更新。通过在 NotificationChannel 中设置 BUBBLE_PREFERENCE_ALL 属性,即可启用通知气泡。
NotificationChannel channel = new NotificationChannel("MyChannel", "My Channel", NotificationManager.IMPORTANCE_DEFAULT);
channel.setBubbleNotificationPreference(NotificationChannel.BUBBLE_PREFERENCE_ALL);
- 画中画模式: 在其他应用程序中观看视频不再需要妥协!画中画模式允许用户在使用其他应用程序时同时观看视频。利用 PictureInPictureManager 类,开发者可以轻松实现画中画功能。
// 进入画中画模式
Intent pictureInPictureIntent = new Intent(this, MainActivity.class);
pictureInPictureIntent.setAction(Intent.ACTION_MAIN);
pictureInPictureIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(pictureInPictureIntent);
- 会话通知组: 对话更加井然有序!会话通知组将来自同一会话的通知分组在一起,简化了通信流程。通过设置 NotificationChannel 的 GROUPING_KEY 属性,开发者可以创建会话通知组。
NotificationChannel channel = new NotificationChannel("MyChannel", "My Channel", NotificationManager.IMPORTANCE_DEFAULT);
channel.setGroup("MyGroup");
UI 优化
Android 11 提供了一系列 UI 优化功能,提升应用程序的视觉体验和性能:
- 暗模式: 让你的应用程序适应用户的喜好!暗模式允许用户切换到较暗的配色方案,缓解眼睛疲劳。通过在 AppCompatDelegate 中设置 setDefaultNightMode() 方法,开发者可以为其应用程序提供暗模式支持。
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
- 动态色彩: 匹配用户的个性!动态色彩允许应用程序根据设备壁纸的颜色调整其 UI 外观。利用 DynamicColorFilter 类,开发者可以轻松实现动态色彩。
DynamicColorFilter filter = new DynamicColorFilter(this, attrs, Color.DKGRAY);
myView.setBackgroundColor(filter.getColor());
- 瀑布滚动: 体验流畅的滚动体验!瀑布滚动提供了一种流畅且直观的滚动体验。通过在 RecyclerView 中实现 OnScrollListener 接口,开发者可以为其应用程序添加瀑布滚动。
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
// 处理滚动事件
}
});
其他适配事项
除了上述关键适配事项之外,还有其他一些需要考虑的方面:
- APK 大小限制: 请注意,Android 11 对 APK 大小进行了限制。对于未提交 Play Feature Delivery 配置的应用程序,APK 大小不得超过 150MB。
- 数据保护: 确保你的应用程序符合《Android 数据安全指南》和《欧盟通用数据保护条例》(GDPR),以保护用户数据。
- 调试信息: 利用 Android 11 中的改进调试信息,轻松识别并解决应用程序中的问题。通过在应用程序中启用调试信息,即可访问这些信息。
结论
通过遵循本指南中的实践,开发者可以确保其应用程序与 Android 11 无缝衔接,充分利用其新特性和优化功能。通过进行 Android 11 适配,开发者可以为用户提供卓越的体验,同时提高应用程序的性能和稳定性。
常见问题解答
- Android 11 适配的截止日期是什么时候?
对于目标 SDK 版本低于 30 的应用程序,Google 建议在 2023 年 11 月之前完成适配。
- 如何更新应用程序的 targetSdkVersion?
在 Android Studio 中,打开项目,然后在应用程序的 build.gradle 文件中修改 targetSdkVersion。
- 什么是文件访问 API?
文件访问 API 是一组允许应用程序以受控方式访问文件和目录的工具。
- 如何实现通知气泡?
在应用程序的 NotificationChannel 中设置 BUBBLE_PREFERENCE_ALL 属性。
- 如何启用画中画模式?
使用 PictureInPictureManager 类中的方法,例如 setPictureInPictureAction(),来启动画中画模式。