web-dev-qa-db-ja.com

DrawableまたはBitmapをアイコンとして設定Android

サーバーから画像をビットマップとしてダウンロードし、それを描画可能に変換します。この描画可能を通知アイコンとして使用したいと思います。しかし、私はそれをすることができません。ここに私のコードがあります:

    Notification notification = new NotificationCompat.Builder(context)

    .setContentTitle(title)

    .setContentText(message)

    .setContentIntent(intent)

    .setSmallIcon(bitmap)

    .setWhen(when)

    .build(); 

しかし、アイコンはResources int値なので、使用するとエラーが発生します。助けて

編集:

今、私は自分のコードを更新し、今私はそのようにしています:

          Notification notification = new NotificationCompat.Builder(context)

        .setContentTitle(title)

        .setContentText(message)

        .setContentIntent(intent)

        .setSmallIcon(icon)

        .setLargeIcon(bitmap)

        .setWhen(when)

        .build();

ただし、左側に大きなアイコンが、右側に小さなアイコンが表示されます。私はこれが必要ないので、このためにsetSmallIcon行を削除してコードを実行しますが、通知が表示されません

18
User42590

_Notification.Builder_ に固有の開発者向けドキュメントを読むと、 setSmallIcon(int icon) にはAリソースIDが必要であることがわかります。使用するドロウアブルのアプリケーションのパッケージ内

画像をダウンロードしてビットマップに変換し、setSmallIcon()に設定してもエラーが発生します。

たとえば、次のようにBitmapDrawableに変換したとしても:

_Drawable d = new BitmapDrawable(getResources(), bmpFinal);
_

Drawableはアプリケーションパッケージに存在しない存在しないため、引き続きエラーが発生します。

唯一の解決策は、Drawableに存在するpackageリソースを使用し、setSmallIcon()メソッドに設定することです。典型的な使用法:

_builder.setSmallIcon(R.drawable.ic_launcher);
_

または、 setLargeIcon (Bitmap icon) にはビットマップインスタンスが必要です。現在のコードに追加の変更を加える必要なく(既にBitmapを持っているため)、要件に適合する場合は、それをそのまま使用できます。

そうでない場合は、Drawableフォルダーのいずれかに既に存在するdrawableリソースを使用する必要があります。

23
Siddharth Lele

この方法を使用して試すことができます

 builder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher));

http://javatechig.com/Android/android-notification-example-using-notificationcompat

17
Remon Amin

主にAPI 23+に関連するこの質問にはいくつかのポイントがあります。setSmallIconのみに関心がある場合は、2番目と3番目のトピックに進んでください。

1日:

次のように、(リソースIDの代わりに)DrawableからLargeIconを設定できます。

_Drawable drawable= ContextCompat.getDrawable(this,R.drawable.your_drawable);

            Bitmap bitmap = ((BitmapDrawable)drawable).getBitmap();

            NotificationCompat.Builder mBuilder =
                    new NotificationCompat.Builder(context)
                            .setLargeIcon(bitmap)
                            .setContentTitle("hahah")
                            .setContentText("Tap to stop")
                            .setOngoing(true);
_

2番目:

23未満のAPIで小さなアイコンを設定する必要がある場合は、_R.drawable.your_resource_のようなリソースIDを設定する必要があります。 _NotificationCompat.Builder_では、setSmallIcon()でDrawablesまたはBitmapsを使用できません。

3番目:

幸いなことに、次のようにNotification.Builderを使用して、バージョン23以降のsetSmallIcon()Icon型にサポートが拡張されました。

_ Drawable drawable = ContextCompat.getDrawable(this,R.drawable.your_drawable);

            Bitmap bitmap = ((BitmapDrawable)drawable).getBitmap();

            Notification.Builder mBuilder =
                    new Notification.Builder(context)
                            .setSmallIcon(Icon.createWithBitmap(bitmap))
                            .setLargeIcon(bitmap)
                            .setContentTitle("hahah")
                            .setContentText("Tap to stop")
                            .setOngoing(true);
_
12
Lucas Paolillo

アプリケーションアイコンを取得するより良いオプション

 Drawable drawable=getApplicationInfo().loadIcon(getPackageManager());
 Bitmap bitmap = ((BitmapDrawable)drawable).getBitmap();



.setSmallIcon(getApplicationInfo().icon)
.setLargeIcon(bitmap)
3
Neeraj Singh

画像を透明にすることが非常に重要です

0