在Android 12中,Google引入了新的策略,称为Scoped Storage,以增强设备的安全性。 Scoped Storage 取代了存储访问框架(SAF)的特性,要求应用程序使用新的系统API来管理应用程序的数据。 然而,许多应用程序没有正确地实现 Scoped Storage 以及 Storage Access Framework,这导致了在Android 12上的兼容性问题。
在 Android 12 上,应用程序必须使用 SAF API 来访问以 URI 形式表示的所有文件。 以下是如何在 Android 11 和 Android 12 中使用 SAF:
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT) intent.addCategory(Intent.CATEGORY_OPENABLE) intent.type = "image/*" startActivityForResult(intent, READ_REQUEST_CODE)
getContentResolver().openInputStream(uri) getContentResolver().openOutputStream(uri)
虽然 Android 12 更新带来了一些挑战,但也为应用程序提供了更好的安全性和隐私保护,应用程序开发人员应该尽快更新其应用程序以适应这些变化。