Nous avons ajusté notre notification en cours pour Oreo et cela a très bien fonctionné. Maintenant, sur Pie uniquement (ne se produisant pas sur les périphériques Oreo), nous obtenons l'erreur intitulée. Est-ce que quelque chose a changé dans les services de premier plan dans Pie qui me manque?
Voici le code onCreate pour le service de premier plan ->
override fun onCreate() {
super.onCreate()
val notification: Notification = NotificationCompat.Builder(this, packageName)
.setSmallIcon(R.drawable.status_notification_icon)
.setContentTitle(getString(R.string.ongoing_notify_temp_title))
.setContentText(getString(R.string.ongoing_notify_temp_message))
.setGroup(AppConstants.NOTIFICATION_GROUP_ONGOING)
.setColor(ContextCompat.getColor(this, R.color.custom_blue))
.build()
startForeground(ONGOING_NOTIFY_ID, notification)
appSettings = AppSettings(this)
weatherLookUpHelper = WeatherLookUpHelper()
MyRoomDatabase.getInstance().invalidationTracker.addObserver(onChange)
retrieveCurrentLocation()
createAlarmManager()
}
comme vous pouvez le constater, nous créons simplement la notification, puis appelons startForeground. Des idées sur pourquoi ce code générerait l'erreur intitulée?
Remarque latérale: Fabric Crashlytics indique que cet incident ne survient que sur des périphériques pixel (pixel, pixel xl, pixel 2, pixel 2 xl) sous Pie
EDIT: Nous avons la permission de premier plan dans notre manifeste
<uses-permission Android:name="Android.permission.FOREGROUND_SERVICE" />
Est-ce que quelque chose a changé dans les services de premier plan dans Pie qui me manque?
OUI Regardez ici notes de migration d'Android 9/Pie
Changement
Autorisation de service de premier plan
Résumé
Les applications souhaitant utiliser les services de premier plan doivent désormais demander d'abord l'autorisation FOREGROUND_SERVICE . Il s’agit d’une autorisation normale. Le système l’accorde donc automatiquement à l’application qui en fait la demande. Le démarrage d'un service de premier plan sans autorisation lève une exception SecurityException.
METTRE &AGRAVE; JOUR
problème associé dans Google Issue Tracker Context.startForegroundService () n’a pas alors appelé Service.startForeground
Comme mentionné ici Limites du service de base , l'application/le service dispose de cinq secondes pour appeler startForeground()
. Si l'application n'appelle pas startForeground () dans le délai imparti, le système arrête le service et déclare l'application comme étant ANR.
Il y a quelques possibilités:
startForeground()
.onCreate
ne sera pas appelée, mais plutôt onStartCommand
. Puis déplacez votre logique vers onStartCommand
pour appeler la méthode startForeground()
.startForeground
ne doit pas être 0 , sinon cela provoquerait également le blocage.