Android 中的向后兼容性和方法
Backwards compatibility and methods in Android
我目前正在更新我维护的库,我想提供一种在方法签名中使用 MediaDataSource 的方法,但这仅在 API 23+ 中可用。我知道 Android 文档指出您应该通过以下检查确保向后兼容性:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
// some API specific code
我也知道可以根据文件夹命名自定义资源,例如 layout-v13
。我的问题是,是否可以添加此类检查或类似的检查,以便我的代码仍可在 < API 上运行 23. Android 是否提供如下结构:
@Version Build.VERSION_CODES.HONEYCOMB // not real code, just what I'm thinking
public void setData(MediaDataSource mediaDataSource) {
// some code
}
是的,通常当您 运行 进入 API compat issues Android 当您按 alt+enter
警告时,Studio 会为您提供多种解决方案。
以 Android 中的 NotificationChannel
为例,仅供奥利奥用户使用 (API 26)。你有以下目标。
选项 1:If else 语句
你已经在你的问题中提到了这一点
选项 2:@目标API 注释
@TargetApi(Build.VERSION_CODES.O)
private void createNotification() {
NotificationChannel notificationChannel = new NotificationChannel("123", "newNotification", NotificationManager.IMPORTANCE_DEFAULT);}
选项 3:@RequiresAPI 注释
@RequiresApi(api = Build.VERSION_CODES.O)
private void createNotification() {
NotificationChannel notificationChannel = new NotificationChannel("123", "newNotification", NotificationManager.IMPORTANCE_DEFAULT);
}
我目前正在更新我维护的库,我想提供一种在方法签名中使用 MediaDataSource 的方法,但这仅在 API 23+ 中可用。我知道 Android 文档指出您应该通过以下检查确保向后兼容性:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
// some API specific code
我也知道可以根据文件夹命名自定义资源,例如 layout-v13
。我的问题是,是否可以添加此类检查或类似的检查,以便我的代码仍可在 < API 上运行 23. Android 是否提供如下结构:
@Version Build.VERSION_CODES.HONEYCOMB // not real code, just what I'm thinking
public void setData(MediaDataSource mediaDataSource) {
// some code
}
是的,通常当您 运行 进入 API compat issues Android 当您按 alt+enter
警告时,Studio 会为您提供多种解决方案。
以 Android 中的 NotificationChannel
为例,仅供奥利奥用户使用 (API 26)。你有以下目标。
选项 1:If else 语句 你已经在你的问题中提到了这一点
选项 2:@目标API 注释
@TargetApi(Build.VERSION_CODES.O)
private void createNotification() {
NotificationChannel notificationChannel = new NotificationChannel("123", "newNotification", NotificationManager.IMPORTANCE_DEFAULT);}
选项 3:@RequiresAPI 注释
@RequiresApi(api = Build.VERSION_CODES.O)
private void createNotification() {
NotificationChannel notificationChannel = new NotificationChannel("123", "newNotification", NotificationManager.IMPORTANCE_DEFAULT);
}