Jai*_*oya 2 android push-notification firebase-cloud-messaging android-push-notification
我正在实施位于https://github.com/firebase/quickstart-android/tree/master/messaging的 Firebase Cloud Messaging Quickstart 示例项目,并将其合并到我的应用程序中。在https://github.com/firebase/quickstart-android/blob/master/messaging/app/src/main/java/com/google/firebase/quickstart/fcm/MainActivity.java我可以看到以下代码块:
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));
}
Run Code Online (Sandbox Code Playgroud)
使用条件的目的是什么if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){}
?据我了解,Build.VERSION.SDK_INT
返回在安装该应用的设备的API级别,并且Build.VERSION_CODES.O
是我定义的API级别的应用程序/文件的build.gradle针对编译,例如:compileSdkVersion 26
。如果用户的设备的 API 级别低于compileSdkVersion
我用来定义我正在编译的 SDK 版本的 API 级别,代码是否要求不执行创建通道以显示通知的代码?我不明白该条件的目的。顺便说一句,我正在使用 API 级别为 23 且符合预期的电话进行测试,因为我compileSdkVersion 26
在我的build.gradle
文件,整个代码块都没有被执行。如果您能帮助阐明这段代码的目的,我将不胜感激,当然这不是我写的代码。我从https://github.com/firebase/quickstart-android/blob/master/messaging/app/src/main/java/com/google/firebase/quickstart/fcm/MainActivity.java 获取它,但我正在尝试去理解它。谢谢你。
Build.VERSION.SDK_INT:
The SDK version of the software currently running on this hardware device.
Run Code Online (Sandbox Code Playgroud)
换句话说 - 这是运行该应用程序的设备的 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 或更低)
使用条件的目的是什么
这是由@CommonsWare 回答的
使用条件的目的是什么
避免在 Android 8.0 之前的设备上执行该代码块。Android 8.0 中添加了通知渠道。尝试在旧设备上调用createNotificationChannel()
会导致崩溃,因为该方法不存在。
这是一个标准的向后兼容配方。通常,实用程序类会隐藏这些内容(例如,SDK 中命名的大多数类...Compat
),但有时,就像这里的情况一样,我们可以自己做。
如果用户的设备的 API 级别低于我用来定义要编译的 SDK 版本的compileSdkVersion,则代码是否要求不执行创建通道以显示通知的代码?
是的。
归档时间: |
|
查看次数: |
15367 次 |
最近记录: |