wake-up-neo.com

android - Fehlerhafte Benachrichtigung - RemoteViews für StatusBarNotification konnten nicht erweitert werden

Ich versuche, eine Benachrichtigung mit einer benutzerdefinierten Ansicht im Infobereich von einem IntentService aus zu senden und erhalte den Fehler "RemoteView konnte nicht expandieren".

Folgendes mache ich in onCreate ():

mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
icon = R.drawable.icon;
tickerText = "data upload in progress";
contentView = new RemoteViews(getApplicationContext().getPackageName(), R.layout.notiflayout);
contentView.setImageViewResource(R.id.image, R.drawable.icon);
contentView.setTextViewText(R.id.text, "Hello");
contentView.setProgressBar(R.id.progressBar, 100, 10, false);
whatNext = PendingIntent.getActivity(getApplicationContext(), 0, new Intent(getApplicationContext(), starterActivity.class), 0);
notification = new Notification(icon, tickerText, System.currentTimeMillis());
notification.contentView = contentView;
notification.contentIntent = whatNext;

Ich rufe notify () von OnHandleIntent () auf und storniere die Benachrichtigungen in OnDestroy ().

Ich habe bestätigt, dass dieser Code in einer unabhängigen App funktioniert, die keinen IntentService hat. Dies in einem IntentService zu tun, verursacht Probleme.

Könnte jemand bitte erklären, was ich falsch mache?

Vielen Dank! 

39
Chaitanya

Für mich bestand das Problem darin, dass ich in der benutzerdefinierten Benachrichtigungsansicht-XML-Datei eine bestimmte Höhe für das Stammlayout festlegte.

Sobald ich mich geändert habe:

Android: layout_height = "@ dimen/notification_expanded"

zu 

Android: layout_height = "match_parent"

im Grundlayout der Benachrichtigungsansicht wurde das Problem behoben. 

Schauen Sie sich auch this example an, um ein einfaches Beispiel für die Verwendung von benutzerdefiniertem Layout für Benachrichtigungen zu sehen.

13
Iman Akbari

aus unbekannten Gründen dürfen Sie in der Root-Ansicht der benutzerdefinierten Remote-Ansicht nicht auf die Dimensionen verweisen! Sie müssen es also hart codieren wie Android:layout_height="64dp", aber wenn Sie Android:layout_height="@dimen/notification_height_that_64" verwenden, erhalten Sie Bad notification posted - Couldn't expand RemoteViews for: StatusBarNotification. Ich hoffe, das wird helfen :)

10
M_AWADI

In meinem Fall wurde die Ausnahme durch eine reguläre View in meinem benutzerdefinierten Benachrichtigungslayout verursacht. Grundsätzlich liegt es daran, dass Sie nur bestimmte Widgets wie TextView, ImageView usw. verwenden dürfen.

9
Nikolai

In meinem Fall konnte ich diesen Fehler beheben, indem ich die zur Verfügung gestellte Symbolgröße in .setSmallIcon(); reduzierte.

5
Ghanendra

Für mich bestand das Problem darin, dass im benutzerdefinierten Layout ein View-Element für die benutzerdefinierte Benachrichtigung festgelegt wurde. Durch das Entfernen des Elements View aus dem Layout wurde das Problem der fehlerhaften Benachrichtigung behoben. 

Hier eine Liste von Layoutelementen , die verwendet werden kann, wenn Sie eine benutzerdefinierte Benachrichtigung mit RemoteView erstellen möchten. 

Weder das Reinigungsprojekt noch die Einstellung des layout_height als match_parent hat für mich funktioniert.

5
Reaz Murshed

Ich habe den gleichen Fehler erhalten, aber das Problem war für mich das Constrain-Layout. Ich habe es in Relative Layout geändert, um das Problem zu beheben.

3
Jeeva

Ich hatte das gleiche Problem. In meinem Fall:

grund -> Ich habe für die Funktion builder.setAction (R.drawable.icon, ...) eine vectordrawable-Funktion verwendet und ich habe auch versucht, sie von der Unterstützung lib zu aktivieren, aber es hat nichts funktioniert. In aktuellen Android-Systemen sehe ich keine Aktionssymbole, in den anderen gibt es diesen Fehler.

lösung -> Ich habe nichts gefunden, die einzige Lösung für mich ist, .xml-Dateien für drawables zu vermeiden und die .png-Dateien in allen Verzeichnissen zu verwenden. hdpi mdpi ldpi ..

3
GabrieleG

@Nikolai's Antwort war hilfreich für mich, in der Tat war es das Problem. Es gibt bestimmte Steuerelemente, die in der Benachrichtigung verwendet werden können. Ich hatte eine Ansicht in meinem Layout für die Benachrichtigung wie unten.

<View
    Android:layout_width="0dp"
    Android:layout_height="match_parent"
    Android:layout_weight="0.04"/>

Dies verursachte den Absturz. Folgende Layouts und Steuerelemente werden unterstützt:  enter image description here

Nach dieser offiziellen Dokumentation .

Ich entfernte es und es funktionierte gut. Hoffe es hilft jemandem.

1
Harry .Naeem

Ich war mit demselben Problem konfrontiert, als ich das benutzerdefinierte Layout in der Benachrichtigung angezeigt habe.

Ich habe ConstraintsLayout als Hauptlayout meiner benutzerdefinierten Benachrichtigung verwendet. Dies ist der Fehler, den ich begangen habe. Es gibt einige Einschränkungen hinsichtlich des in Android zu verwendenden Constraint-Layouts.

Schließlich habe ich mein Grundlayout in RelativeLayout geändert und meine Benachrichtigung wurde perfekt angezeigt. Ich habe meine Ansicht im Screenshot unten angehängt.

 enter image description here

0
Akshay Paliwal

ich sehe, das ist eine Menge Ärger im Zusammenhang mit diesem Thema, in meinem Fall wurde dieses Problem durch die Verwendung von verursacht

Android:background="?attr/selectableItemBackground" 

ich habe das auf meinem ImageButton verwendet und jedes Mal, wenn meine App abstürzte, aber als ich es entfernte, war alles in Ordnung, ich denke, das Problem ist, dass Sie keinen benutzerdefinierten View Typ oder Themenattribute verwenden sollten Ihrer Meinung nach hoffe ich, dass dies einem anderen helfen wird, der an diesem Problem festhält

0
Mofor Emmanuel

In meinem Fall war das Problem eine Inkonsistenz zwischen dem Anruf

setShowActionsInCompactView(0)

Und die .addAction-Aufrufe ... Die Anzahl der Aktionen war unterschiedlich, daher der Fehler

0
Teshte

Seien Sie vorsichtig bei der Verwendung von Vector Drawables. Auf Geräten vor Lollipop-Geräten, die ein Symbol mit NotificationCompat.Builder-Methoden wie setSmallIcon setzen, führt dies zum Absturz. Sie erhalten den gleichen Absturz, wenn Sie Vector Drawables in Ihrer benutzerdefinierten Ansicht verwenden.

0
a.ch.