0

Ich implementiere das Firebase Cloud Messaging Quickstart-Beispielprojekt unter https://github.com/firebase/quickstart-android/tree/master/messaging, das es in meine App integriert. In https://github.com/firebase/quickstart-android/blob/master/messaging/app/src/main/java/com/google/firebase/quickstart/fcm/MainActivity.java kann ich den folgenden Code-Block siehe:Was ist der Zweck der Bedingung "if (Build.VERSION.SDK_INT> = Build.VERSION_CODES.O) {" im Firebase Cloud Messaging-Beispielprojekt?

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)); 
} 

Was ist der Zweck, den Zustand der Verwendung if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){}? Von dem, was ich verstehe, Build.VERSION.SDK_INT gibt die API-Ebene des Geräts, auf dem die App installiert ist, und Build.VERSION_CODES.O ist, was ich als die API-Ebene zum Kompilieren in der app/build.gradle-Datei definieren, zum Beispiel: compileSdkVersion 26. Soll der Code, der den Code erstellt, der den Kanal zum Anzeigen von Benachrichtigungen erstellt, nicht ausgeführt werden, wenn der Benutzer ein Gerät mit einer API-Ebene hat, die niedriger ist als die compileSdkVersion, die ich verwende, um zu definieren, für welche SDK-Version ich kompiliere? Ich verstehe den Zweck dieser Bedingung nicht. By the way, ich teste mit einem Telefon, dessen API Level 23 ist und erwartet, da ich compileSdkVersion 26 in meiner build.gradle Datei verwende, wird der gesamte Code-Block nicht ausgeführt. Ich würde es begrüßen, wenn Sie helfen könnten, den Zweck dieses Codes zu verdeutlichen, und natürlich ist es nicht Code, den ich geschrieben habe. Ich nahm es von https://github.com/firebase/quickstart-android/blob/master/messaging/app/src/main/java/com/google/firebase/quickstart/fcm/MainActivity.java, aber ich versuche es zu verstehen. Vielen Dank.

Antwort

1

Was ist der Zweck, den Zustand der Verwendung

Um zu vermeiden, dass 8.0 Code-Block auf Geräte älter als Android ausgeführt wird. Benachrichtigungskanäle wurden in Android 8.0 hinzugefügt. Der Versuch, auf älteren Geräten createNotificationChannel() aufzurufen, würde zu einem Absturz führen, da diese Methode nicht existiert.

Dies ist ein standardmäßiges Abwärtskompatibilitätsrezept. Häufig verbergen Hilfsklassen dieses Zeug (z. B. die meisten der Klassen ...Compat im SDK), aber manchmal, wie es hier der Fall ist, können wir es selbst tun.

Ist der Code nicht gefragt, um den Code auszuführen, der den Kanal erzeugt Benachrichtigungen anzeigen, wenn der Benutzer ein Gerät mit einem API-Ebene hat, die niedriger ist als die compileSdkVersion ist, dass ich die SDK-Version verwende ich zu definieren bin kompilieren gegen?

Ja.