Po uaktualnieniu mojego projektu do Androida O
buildToolsVersion "26.0.1"
Lint w Android Studio wyświetla przestarzałe ostrzeżenie dla następującej metody konstruktora powiadomień:
new NotificationCompat.Builder(context)
Problem polega na tym, że programiści Androida aktualizują swoją dokumentację opisującą NotificationChannel, aby obsługiwać powiadomienia w systemie Android O i dostarczają nam fragment kodu, ale z tym samym przestarzałym ostrzeżeniem:
Notification notification = new Notification.Builder(MainActivity.this)
.setContentTitle("New Message")
.setContentText("You've received new messages.")
.setSmallIcon(R.drawable.ic_notify_status)
.setChannelId(CHANNEL_ID)
.build();
Moje pytanie: czy jest jakieś inne rozwiązanie do tworzenia powiadomień i nadal obsługuje Androida O?
Rozwiązaniem, które znalazłem, jest przekazanie identyfikatora kanału jako parametru w konstruktorze Notification.Builder. Ale to rozwiązanie nie nadaje się do ponownego użycia.
new Notification.Builder(MainActivity.this, "channel_id")
android
notifications
android-notifications
GuilhermeFGL
źródło
źródło
notificationBuild.setChannelId("channel_id")
. W moim przypadku to ostatnie rozwiązanie jest bardziej przydatne, ponieważ mojeNotificationCompat.Builder
jest ponownie używane w kilku metodach, zapisując parametry ikon, dźwięków i wibracji.Odpowiedzi:
W dokumentacji wspomniano, że metoda konstruktora
NotificationCompat.Builder(Context context)
jest przestarzała. I musimy użyć konstruktora, który machannelId
parametr:NotificationCompat.Builder Dokumentacja:
Notification.Builder Dokumentacja:
Jeśli chcesz ponownie użyć seterów konstruktora, możesz utworzyć konstruktora za pomocą
channelId
i przekazać go do metody pomocniczej i ustawić preferowane ustawienia w tej metodzie.źródło
Notification.Builder(context)
rozwiązania w sesji NotificationChannel. Ale cóż, przynajmniej znalazłeś post powiadamiający o tym, że wycofanie =)NotificationCompat.Builder(Context context)
, a następnie przypisać kanał w następujący sposób:builder.setChannelId(String channelId)
Oto działający kod dla wszystkich wersji Androida od poziomu API 26+ z kompatybilnością wsteczną.
źródło
.setPriority(Notification.PRIORITY_MAX)
else użyj zaktualizowanego kodu dla 26 API. `Wywołaj konstruktor 2-arg: Aby uzyskać zgodność z systemem Android O, wywołaj support-v4
NotificationCompat.Builder(Context context, String channelId)
. W przypadku korzystania z systemu Android N lub starszegochannelId
zostanie zignorowany. W przypadku korzystania z systemu Android O utwórz również plikNotificationChannel
z tym samym plikiemchannelId
.Nieaktualny przykładowy kod: przykładowy kod na kilku stronach JavaDoc, takich jak wywołanie Notification.Builder,
new Notification.Builder(mContext)
jest nieaktualny.Przestarzałe konstruktory:
Notification.Builder(Context context)
i v4NotificationCompat.Builder(Context context)
są przestarzałe na rzeczNotification[Compat].Builder(Context context, String channelId)
. (Zobacz Notification.Builder (android.content.Context) i v4 NotificationCompat.Builder (kontekst kontekstowy) .)Przestarzała klasa: cała klasa v7
NotificationCompat.Builder
jest przestarzała. (Widzieć NotificationCompat.Builder w wersji 7 ). WcześniejNotificationCompat.Builder
do obsługi potrzebna była wersja 7NotificationCompat.MediaStyle
. W Android O, tam jest v4NotificationCompat.MediaStyle
w Media-compat biblioteki „sandroid.support.v4.media
pakietu. Użyj tego, jeśli potrzebujeszMediaStyle
.API 14+: W Support Library od 26.0.0 i nowszych, pakiety support-v4 i support-v7 obsługują minimalny poziom API 14. Nazwy v # są historyczne.
Widzieć Najnowsze wersje biblioteki pomocy technicznej .
źródło
Zamiast sprawdzać
Build.VERSION.SDK_INT >= Build.VERSION_CODES.O
tyle odpowiedzi, ile sugeruje, istnieje nieco prostszy sposób -Dodaj następujący wiersz do
application
sekcji pliku AndroidManifest.xml , jak wyjaśniono w dokumencie Konfigurowanie aplikacji klienckiej Firebase Cloud Messaging na Androida :Następnie dodaj wiersz z nazwą kanału do pliku values / strings.xml :
Po tym będziesz mógł korzystać z nowej wersji konstruktora NotificationCompat.Builder z 2 parametrami (ponieważ stary konstruktor z 1 parametrem został wycofany w systemie Android Oreo):
źródło
Oto przykładowy kod, który działa w systemie Android Oreo i mniej niż Oreo.
źródło
Prosta próbka
źródło
Prawidłowy kod to:
z zależnościami 26.0.1 i nowymi zaktualizowanymi zależnościami, takimi jak 28.0.0.
Niektórzy użytkownicy używają tego kodu w następujący sposób:
Tak więc logika to metoda, którą zadeklarujesz lub zainicjujesz, a następnie ta sama metoda po prawej stronie zostanie użyta do alokacji. jeśli w Leftside of = użyjesz jakiejś metody, to ta sama metoda zostanie użyta po prawej stronie = do alokacji z new.
Wypróbuj ten kod ... Na pewno zadziała
źródło
Ten konstruktor był przestarzały na poziomie interfejsu API 26.1.0. zamiast tego użyj NotificationCompat.Builder (Context, String). Wszystkie opublikowane powiadomienia muszą określać identyfikator NotificationChannel.
źródło
źródło