Firebase Cloud Messaging 示例项目中条件 "if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {" 的用途是什么?
What is the purpose of the condition "if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {" in the Firebase Cloud Messaging sample project?
我正在实施 https://github.com/firebase/quickstart-android/tree/master/messaging, incorporating it to my app. In https://github.com/firebase/quickstart-android/blob/master/messaging/app/src/main/java/com/google/firebase/quickstart/fcm/MainActivity.java 上的 Firebase Cloud Messaging Quickstart 示例项目我可以看到以下代码块:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
// Create channel to show notifications.
String channelId = getString(R.string.default_notification_channel_id);
String channelName = getString(R.string.default_notification_channel_name);
NotificationManager notificationManager =
getSystemService(NotificationManager.class);
notificationManager.createNotificationChannel(new NotificationChannel(channelId,
channelName, NotificationManager.IMPORTANCE_LOW));
}
使用条件if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){}
的目的是什么?据我了解,Build.VERSION.SDK_INT
returns 安装应用程序的设备的 API 级别, Build.VERSION_CODES.O
是我定义的 API 级别在 app/build.gradle 文件中编译,例如:compileSdkVersion 26
。如果用户的 API 级别低于我用来定义哪个 SDK 版本的 compileSdkVersion
级别,代码是否要求不执行创建通道以显示通知的代码我正在编译?我不明白那个条件的目的。顺便说一句,我正在测试一个 phone,它的 API 级别是 23 并且是预期的,因为我在我的 build.gradle
文件中使用 compileSdkVersion 26
,所以整个代码块是没有被执行。如果您能帮助阐明这段代码的用途,我将不胜感激,当然这不是我写的代码。我从 https://github.com/firebase/quickstart-android/blob/master/messaging/app/src/main/java/com/google/firebase/quickstart/fcm/MainActivity.java 中获取它,但我正在尝试理解它。谢谢。
What is the purpose of using the condition
避免在 Android 8.0 之前的设备上执行该代码块。 Android 8.0 中添加了通知渠道。尝试在旧设备上调用 createNotificationChannel()
会导致崩溃,因为该方法将不存在。
这是一个标准的向后兼容方法。通常,实用程序 类 会隐藏这些东西(例如,SDK 中大多数名为 ...Compat
的 类),但有时,就像这里的情况一样,我们可以自己做。
Is the code asking to not execute the code that creates the channel to show notifications, if the user has a device with an API level that is lower than the compileSdkVersion that I am using to define which SDK version I am compiling against?
是的。
Build.VERSION.SDK_INT:
The SDK version of the software currently running on this hardware device.
换句话说 - 这是设备的 Android 版本 运行 应用程序。
Build.VERSION_CODES.O -
是对 API 级别 26 的引用(Android Oreo 即 Android 8)
https://developer.android.com/reference/android/os/Build.VERSION_CODES
if ((Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) 为 TRUE - 表示设备 运行 应用程序具有 Android SDK 26 或更高版本 - 以及代码块在你里面 "if" 语句将被执行。
否则- SDK 版本低于 26。(SDK 25 或更低)
What is the purpose of using the condition
@CommonsWare 回答了这个问题
我正在实施 https://github.com/firebase/quickstart-android/tree/master/messaging, incorporating it to my app. In https://github.com/firebase/quickstart-android/blob/master/messaging/app/src/main/java/com/google/firebase/quickstart/fcm/MainActivity.java 上的 Firebase Cloud Messaging Quickstart 示例项目我可以看到以下代码块:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
// Create channel to show notifications.
String channelId = getString(R.string.default_notification_channel_id);
String channelName = getString(R.string.default_notification_channel_name);
NotificationManager notificationManager =
getSystemService(NotificationManager.class);
notificationManager.createNotificationChannel(new NotificationChannel(channelId,
channelName, NotificationManager.IMPORTANCE_LOW));
}
使用条件if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){}
的目的是什么?据我了解,Build.VERSION.SDK_INT
returns 安装应用程序的设备的 API 级别, Build.VERSION_CODES.O
是我定义的 API 级别在 app/build.gradle 文件中编译,例如:compileSdkVersion 26
。如果用户的 API 级别低于我用来定义哪个 SDK 版本的 compileSdkVersion
级别,代码是否要求不执行创建通道以显示通知的代码我正在编译?我不明白那个条件的目的。顺便说一句,我正在测试一个 phone,它的 API 级别是 23 并且是预期的,因为我在我的 build.gradle
文件中使用 compileSdkVersion 26
,所以整个代码块是没有被执行。如果您能帮助阐明这段代码的用途,我将不胜感激,当然这不是我写的代码。我从 https://github.com/firebase/quickstart-android/blob/master/messaging/app/src/main/java/com/google/firebase/quickstart/fcm/MainActivity.java 中获取它,但我正在尝试理解它。谢谢。
What is the purpose of using the condition
避免在 Android 8.0 之前的设备上执行该代码块。 Android 8.0 中添加了通知渠道。尝试在旧设备上调用 createNotificationChannel()
会导致崩溃,因为该方法将不存在。
这是一个标准的向后兼容方法。通常,实用程序 类 会隐藏这些东西(例如,SDK 中大多数名为 ...Compat
的 类),但有时,就像这里的情况一样,我们可以自己做。
Is the code asking to not execute the code that creates the channel to show notifications, if the user has a device with an API level that is lower than the compileSdkVersion that I am using to define which SDK version I am compiling against?
是的。
Build.VERSION.SDK_INT:
The SDK version of the software currently running on this hardware device.
换句话说 - 这是设备的 Android 版本 运行 应用程序。
Build.VERSION_CODES.O - 是对 API 级别 26 的引用(Android Oreo 即 Android 8) https://developer.android.com/reference/android/os/Build.VERSION_CODES
if ((Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) 为 TRUE - 表示设备 运行 应用程序具有 Android SDK 26 或更高版本 - 以及代码块在你里面 "if" 语句将被执行。
否则- SDK 版本低于 26。(SDK 25 或更低)
What is the purpose of using the condition
@CommonsWare 回答了这个问题