232

アプリで通知が生成されますが、その通知用に設定したアイコンが表示されません。代わりに、白い四角が表示されます。

アイコンの png のサイズを変更してみました (寸法 720x720、66x66、44x44、22x22)。不思議なことに、より小さい寸法を使用すると、白い正方形が小さくなります。

私はこの問題と、通知を生成する正しい方法をグーグルで検索しました。コードを読んだことから、コードは正しいはずです。悲しいことに、物事はあるべき姿ではありません。

私の電話は Android 5.1.1 を搭載した Nexus 5 です。この問題は、Android 5.0.1 を搭載した Samsung Galaxy s4 と Android 5.0.1 を搭載した Motorola Moto G のエミュレーターにも存在します (どちらも私が借りましたが、現在は持っていません)。

通知のコードは次のとおりで、2 つのスクリーンショットがあります。さらに詳しい情報が必要な場合は、お気軽にお問い合わせください。

皆さん、ありがとうございました。

@SuppressLint("NewApi") private void sendNotification(String msg, String title, String link, Bundle bundle) {
    NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
    Intent resultIntent = new Intent(getApplicationContext(), MainActivity.class);
    resultIntent.putExtras(bundle);
    PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
            resultIntent, Intent.FLAG_ACTIVITY_NEW_TASK);
    Notification notification;
    Uri sound = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.notificationsound);
    notification = new Notification.Builder(this)
                .setSmallIcon(R.drawable.lg_logo)
                .setContentTitle(title)
                .setStyle(new Notification.BigTextStyle().bigText(msg))
                .setAutoCancel(true)
                .setContentText(msg)
                .setContentIntent(contentIntent)
                .setSound(sound)
                .build();
    notificationManager.notify(0, notification);
}

通知を開かずに 通知を開きました

4

21 に答える 21

42

Google のデザイン ガイドラインに従うことを強くお勧めします。

「通知アイコンは完全に白でなければなりません」と書かれています。

于 2015-06-12T04:55:47.760 に答える
10

これを試して

私は同じ問題に直面していましたが、多くの答えを試しましたが、解決策が得られませんでした。最終的に、問題を解決する方法を見つけました。

- 背景が透明な通知アイコンを作成します。アプリの幅と高さは以下のサイズである必要があり、これらすべてをプロジェクトに貼り付けます->アプリ->src->main->res

  • MDPI 24*24

  • HDPI 36*36

  • XHDPI 48*48

  • XXHDPI 72*72


上記の後に、この下の行を onMessageReceived メソッドに貼り付けます


Intent intent = new Intent(this, News.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent,
                    PendingIntent.FLAG_ONE_SHOT);
            Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
            NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this);
            if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
            {
                notificationBuilder.setSmallIcon(R.drawable.notify)
                                      //            .setContentTitle(title)
                            //                        .setContentText(message)
                        .setAutoCancel(true)
                        .setSound(defaultSoundUri)
                        .setContentIntent(pendingIntent);
            } else
                {
                    notificationBuilder.setSmallIcon(R.drawable.notify)
                       //                                .setContentTitle(title)
                        //                        .setContentText(message)
                            .setAutoCancel(true)
                            .setSound(defaultSoundUri)
                            .setContentIntent(pendingIntent);
            }
            NotificationManager notificationManager =
                    (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
            notificationManager.notify(0, notificationBuilder.build());

このコードをマニフェスト ファイルに追加することを忘れないでください

<meta-data 
android:name="com.google.firebase.messaging.default_notification_icon" 
android:resource="@drawable/app_icon" />
于 2017-08-01T07:16:15.397 に答える
9

以下のコードをマニフェストに追加することで問題を解決しました。

    <meta-data
        android:name="com.google.firebase.messaging.default_notification_icon"
        android:resource="@drawable/ic_stat_name" />

    <meta-data
        android:name="com.google.firebase.messaging.default_notification_color"
        android:resource="@color/black" />

Android Studioでic_stat_name作成した場所 res を右クリック >> New >>Image Assets >> IconType(Notification)

そして、通知ペイロードを使用してサーバーphp側で行う必要があるもう1つのステップ

$message = [
    "message" => [
        "notification" => [
            "body"  => $title , 
            "title" => $message
        ],

        "token" => $token,

    "android" => [
           "notification" => [
            "sound"  => "default",
            "icon"  => "ic_stat_name"
            ]
        ],

       "data" => [
            "title" => $title,
            "message" => $message
         ]


    ]
];

セクションに注意してください

    "android" => [
           "notification" => [
            "sound"  => "default",
            "icon"  => "ic_stat_name"
            ]
        ]

アイコン名は"icon" => "ic_stat_name"、マニフェストと同じセットである必要があります。

于 2019-04-02T08:06:53.120 に答える
7

ロリポップ サポート通知アイコンを提供する場合は、2 種類の通知アイコンを作成します。

  1. 通常の通知アイコン : 以下のロリポップ バージョン用。
  2. 背景が透明な通知アイコン:ロリポップ以上のバージョン用。

OS バージョンに基づいて、実行時に適切なアイコンを通知ビルダーに設定します。

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this);
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    mBuilder.setSmallIcon(R.drawable.ic_push_notification_transperent);
} else {
    mBuilder.setSmallIcon(R.drawable.ic_push_notification);
}
于 2015-06-12T05:23:18.940 に答える
4

この問題を修正するための要件:

  1. 画像形式: 32 ビット PNG (アルファ付き)

  2. 画像は透明である必要があります

  3. 透明度カラー インデックス: ホワイト (FFFFFF)

ソース: http://gr1350.blogspot.com/2017/01/problem-with-setsmallicon.html

于 2017-01-27T09:53:41.760 に答える
3

カスタマイズされたローカル通知の場合、 AndroidManifest.xml に次のメタデータを追加すると機能します。

 <application
    android:name="xxxxxx"
        android:label="xxxxxx"
        android:icon="@mipmap/ic_launcher"
        
        >

       <meta-data
                android:name="your_apps_bundle_id.default_notification_icon"
                android:resource="@drawable/ic_notif" />

......
于 2021-01-13T12:45:10.640 に答える
2

Android 8.0でも同様の問題があります。白いアイコン リソースを使用してみてください。アイコンに色付きの画像を使用しようとすると白い四角が表示されます。それを白いアイコンに置き換えると、作業が開始されます。

于 2018-05-03T07:14:13.703 に答える
1

バージョンごとに異なるアイコンを使用できます。次のようにアイコンにロジックを設定するだけです。

int icon = Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP ? R.drawable.colored_: R.drawable.white_tint_icon_for_lolipop_or_upper;
于 2016-10-21T15:22:57.557 に答える
1

SDK >= 23 の場合は、setLargeIcon を追加してください

notification = new Notification.Builder(this)
            .setSmallIcon(R.drawable.ic_launcher)
            .setLargeIcon(context.getResources(), R.drawable.lg_logo))
            .setContentTitle(title)
            .setStyle(new Notification.BigTextStyle().bigText(msg))
            .setAutoCancel(true)
            .setContentText(msg)
            .setContentIntent(contentIntent)
            .setSound(sound)
            .build();
于 2017-01-16T06:43:01.410 に答える
1

カラフルなアイコンを残したい場合 - 回避策 アイコン
に少し異なる色のピクセルを追加します。
私の場合、陰影と光のある黒いアイコンがあります。濃い青色のピクセルを追加すると機能します。

于 2017-12-05T15:45:28.340 に答える