2016-07-31 6 views
0

現在、私はNotificationCompatがアイコンではなく、リソースIDのsetSmallIconをサポートしていないという事実に起因し、このWETコードがあります。setSmallIcon(アイコン:アイコン)とNotificationCompat

val notification = if (Build.VERSION.SDK_INT < 23) { 
      NotificationCompat.Builder(this) 
        .setLargeIcon(bitmap) 
        .setSmallIcon(R.drawable.ic_launcher) 
        .setContentText(intentDescriber!!.userFacingIntentDescription) 
        .setContentTitle(label) 
        .setContentIntent(contentIntent) 
        .setAutoCancel(true) 
        .build() 
     } else { 
      Notification.Builder(this) 
        .setSmallIcon(Icon.createWithBitmap(bitmap)) 
        .setLargeIcon(bitmap) 
        .setContentText(intentDescriber!!.userFacingIntentDescription) 
        .setContentTitle(label) 
        .setContentIntent(contentIntent) 
        .setAutoCancel(true) 
        .build() 
     } 

は作るための方法はあります

+0

IconクラスはSDK 23で導入されました。したがって、compatはそれをサポートしていません。 – lionscribe

+0

しかし、それはビットマップを取ることができます23インプットでは、このSDKレベル以上のためにアイコンを使用してビットマップをラップすることができます – ligi

+0

あなたはいつも独自のビルダークラスを作ることができます... – lionscribe

答えて

0

リフレクションを快適に使用できる場合は、ビルダの小さなアイコンを設定するのではなく、ビルトイン通知自体に設定します。これは、より良い(DRY?) - 問題は両方のビルダークラスが異なることです。そこではSDK 23をチェックして、リフレクションを使用してsetSmallIconを呼び出すことができます(これはパブリックメソッドですが、隠されていますが、変更されることはありません)。

+0

通知はpublic setSmallIconを持たない - ビルダーは – ligi

+0

申し訳ありません、ドキュメントは私をだましました。それはgetSmallIconを持っていますが、setSmallIconはありません。 setSmallIconへのリンクはビルダーにとってのものでした。 – lionscribe

+0

心配はありませんが、多分クリーンアップのための回答を削除してください – ligi

0

私は、NotificationCompat.BuilderNotification.Builderの2つの実装で独自のビルダーインターフェイスを作成することをお勧めします。あなたは「アンドロイド」を繰り返しているかもしれませんが、自分でを繰り返すことはありません。例えば:

interface NotificationFacadeBuilder<out T> { 
    /* facade builder method declarations go here */ 
    fun build(): T 
} 

class SupportAppNotificationCompatFacadeBuilder(context: Context) 
: NotificationFacadeBuilder<NotificationCompat> { 
    val builder = NotificationCompat.Builder(context) 
    /* facade builder method implementations go here and delegate to `builder` */ 
    override fun build(): NotificationCompat = TODO() 
} 

class AppNotificationFacadeBuilder(context: Context) 
: NotificationFacadeBuilder<Notification> { 
    val builder = Notification.Builder(context) 
    /* facade builder method implementations go here and delegate to `builder` */ 
    override fun build(): Notification = TODO() 
} 

NotificationFacadeBuilder(または何でもあなたはそれを呼び出すことにした)あなたが必要とする各共通ビルダーメソッドを宣言する必要がありますし、各実装クラスは、単にそれぞれの、実際のビルダーの実装にそれらを委任します。

関連する問題