web-dev-qa-db-ja.com

Notification.Builder(context)非推奨Android O

Notification.Builder(context)は、Android Oの通知チャネルの場所で非推奨になりました。

問題:

Notification.Builder(context, StringID)の代わりにNotification.Builder(context)を使用した後、Android Oデバイスへの通知を受け取りました。
ただし、Android 23(M)で試してみた後、通知を受け取りませんでした。コードをデバッグしましたが、デバッガーがAndroid 23(M)のNotification.Builder(context、StringID)の行にヒットすると、実行が停止しました。

FIX:

この問題を修正するために、if/else条件を使用して、Android Oデバイスと他のデバイスとを分離しました。

次のコードスニペットがあります。

Notification.Builder notificationBuilder;

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    notificationBuilder = new Notification.Builder(mContext,
            mContext.getResources().getString(R.string.notification_id_channel));
} else {
    notificationBuilder = new Notification.Builder(mContext);
}

Android Studioのリントには、次の非推奨行が表示されます。

enter image description here

質問:

その非推奨の警告行を取り除く方法はありますか?

24
Red M

解決策は、NotificationCompat.Builder(Context context, String channelId)を使用することです。これを使用する場合、APIレベルを確認する必要はありません。Builderは、Oreo以前のデバイスのチャンネルIDを無視します。

API 15、22、23、および26でテストしましたが、完全に機能します。

38
Wess

一意のchannelId(「My​​ChannelId_01」など)を定義し、NotificationCompat.Builder(ctx、「MyChannelId_01」)を呼び出す必要があります。作成された通知は、このNotificationChannel "MyChannelId_01"に投稿されます。

これにより、通知の重要性を定義できます(これにより、このチャネルに投稿される割り込み通知の方法が制御されます。値はIMPORTANCE_UNSPECIFIED、IMPORTANCE_NONE、IMPORTANCE_MIN、IMPORTANCE_LOW、IMPORTANCE_DEFAULTまたはIMPORTANCE_HIGHです)。

ここに例を見つけることができます: 通知チャネルの作成

2
Christian

私は同じ問題を抱えていたので、Android 22と24をターゲットにしたので、これを行いました:NotificationCompat.Builder notification = new NotificationCompat.Builder(MainActivity.this、 "")

誰かがこれはハックだと言うだろうが、警告は取り除かれ、問題はない。

空の文字列を渡すことは、<Android 26。

これにより26の問題が発生する場合、他の誰かが述べることができます。

ありがとう

1
user3365935