返回

解锁 Android 11 的潜能:全方位适配指南

Android

拥抱 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 适配,开发者可以为用户提供卓越的体验,同时提高应用程序的性能和稳定性。

常见问题解答

  1. Android 11 适配的截止日期是什么时候?

对于目标 SDK 版本低于 30 的应用程序,Google 建议在 2023 年 11 月之前完成适配。

  1. 如何更新应用程序的 targetSdkVersion?

在 Android Studio 中,打开项目,然后在应用程序的 build.gradle 文件中修改 targetSdkVersion。

  1. 什么是文件访问 API?

文件访问 API 是一组允许应用程序以受控方式访问文件和目录的工具。

  1. 如何实现通知气泡?

在应用程序的 NotificationChannel 中设置 BUBBLE_PREFERENCE_ALL 属性。

  1. 如何启用画中画模式?

使用 PictureInPictureManager 类中的方法,例如 setPictureInPictureAction(),来启动画中画模式。