web-dev-qa-db-ja.com

不正な通知が投稿されました-StatusBarNotificationのRemoteViewを展開できませんでした

IntentServiceから通知領域にカスタムビューで通知を投稿しようとしていますが、_Couldn't expand RemoteView_エラーが発生します。

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;
_

notify()からonHandleIntent()を呼び出して、onDestroy()の通知をキャンセルしています。

このコードは、IntentServiceを持たない独立したアプリで動作することを確認しました。 IntentServiceでこれを行うと、何らかの問題が発生します。

誰かが私が間違っていることは何ですか?

ありがとう!

43
Chaitanya

私にとっての問題は、カスタム通知ビューxmlファイルでルートレイアウトに特定の高さを設定していたことです。

変更したらすぐに:

Android:layout_height = "@ dimen/notification_expanded"

Android:layout_height = "match_parent"

通知ビューのルートレイアウトで、問題は解決されました。

この例 を見て、通知にカスタムレイアウトを使用する簡単な例を確認してください。

15
Iman Akbari

理由は不明ですが、カスタムリモートビューのルートビューでディメンションを参照することはできません。 Android:layout_height="64dp"のようにハードコーディングする必要がありますが、Android:layout_height="@dimen/notification_height_that_64"を使用した場合はBad notification posted - Couldn't expand RemoteViews for: StatusBarNotificationが得られます。これが役立つことを願っています:)

12
M_AWADI

私の場合、例外はカスタム通知レイアウトの通常のViewが原因でした。基本的には、TextView、ImageViewなどの特定のウィジェットのみを使用できるためです。

10
Nikolai

私にとって問題は、カスタム通知のカスタムレイアウトセットにViewアイテムがあることでした。レイアウトからViewアイテムを削除することで、Bad Notification Postedの問題を解決しました。

RemoteViewを使用してカスタム通知を作成する場合は、 レイアウトアイテムのリスト を使用できます。

プロジェクトのクリーニングもlayout_heightmatch_parentとしての設定も機能しませんでした。

6
Reaz Murshed

私の場合、.setSmallIcon();に提供するアイコンのサイズを小さくすることで、このエラーを修正できました。

5
Ghanendra

同じエラーが発生しましたが、問題は制約レイアウトでした。問題を解決するために、Relative Layoutに変更しました。

3
Jeeva

同じ問題がありました。私の場合:

理由->私はbuilder.setAction(R.drawable.icon、...)関数にvectordrawableを使用し、サポートlibからそれらを有効にしようとしましたが、何も機能しませんでした。最近のAndroidシステムではアクションアイコンが表示されませんが、他ではこのエラーが発生します。

解決策->何も見つかりませんでした、唯一の回避策は、ドロアブルの.xmlファイルを避け、すべてのディレクトリhdpi mdpi ldpi。で.pngファイルを使用することです.

3
GabrieleG

@Nikolaiの答えは私にとって助けになりました、確かに問題でした。同じ問題がありました。通知で使用できる特定のコントロールがあります。以下のように、通知用にレイアウトにビューがありました。

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

これがクラッシュの原因でした。次のレイアウトとコントロールがサポートされています: enter image description here

このように 公式ドキュメント

私はそれを取り除いて、それはうまく働きました。それが誰かを助けることを願っています。

1
Harry .Naeem

私は通知でカスタムレイアウトを表示する際に同じ問題に直面していましたが、私が見つけたのは:

ConstraintsLayoutをカスタム通知のルートレイアウトとして使用していましたが、これは私がコミットしていた間違いです。 Androidで使用するレイアウトの制約にはいくつかの制限があります。

最後に、ルートレイアウトをRelativeLayoutに変更し、通知が完全に表示されるようにしました。下のスクリーンショットにビューを添付しました。

enter image description here

0
Akshay Paliwal

私はこのトピックに関連するトラブルがたくさんあると思います、私の場合、この問題は

Android:background="?attr/selectableItemBackground" 

私はImageButtonでそれを使用し、アプリがクラッシュするたびにそれを削除しましたが、すべてが大丈夫でした、問題は、カスタムのViewタイプまたはテーマ属性あなたの意見、私はこれがこの問題で立ち往生している別の助けになることを願っています

0
Mofor Emmanuel

私の場合、問題は呼び出し間の不整合でした

setShowActionsInCompactView(0)

そしてその .addAction呼び出し...アクションの数が異なっていたため、エラー

0
Teshte

ベクターのドロアブルを使用するときは注意してください。 Lollipop以前のデバイスでは、setSmallIconなどのNotificationCompat.Builderメソッドを使用してアイコンを設定すると、このクラッシュが発生します。カスタムビューでベクタードロウアブルを使用すると、同じクラッシュが発生します。

0
a.ch.