web-dev-qa-db-ja.com

Android Oレポート通知はチャネルに投稿されません-しかし

カップルAndroid O通知の質問:

1)通知チャネル(下記を参照)を作成し、.setChannelId()でビルダーを呼び出しています(作成したチャネルの名前「wakey」を渡しますが、アプリを実行するとメッセージが表示されます)チャンネル「null」への通知の投稿に失敗したことが原因です。これは何が原因ですか?

2)#1の答えは、チェックするように言っている「ログ」にあると思われますが、logcatをチェックしましたが、通知やチャンネルについては何も表示されません。調べるように言っているログはどこにありますか?

チャンネルの作成に使用しているコードは次のとおりです。

NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
CharSequence name = context.getString(R.string.app_name);
String description = "yadda yadda"
int importance = NotificationManager.IMPORTANCE_DEFAULT;

NotificationChannel channel = new NotificationChannel(NOTIFICATION_CHANNEL, name, importance);
channel.setDescription(description);

notificationManager.createNotificationChannel(channel);

通知を生成するコードは次のとおりです。

Notification.Builder notificationBuilder;

Intent notificationIntent = new Intent(context, BulbActivity.class);
notificationIntent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND); // Fix for https://code.google.com/p/Android/issues/detail?id=53313

PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0);

Intent serviceIntent = new Intent(context, RemoteViewToggleService.class);
serviceIntent.putExtra(WakeyService.KEY_REQUEST_SOURCE, WakeyService.REQUEST_SOURCE_NOTIFICATION);

PendingIntent actionPendingIntent = PendingIntent.getService(context, 0, serviceIntent, PendingIntent.FLAG_CANCEL_CURRENT);
_toggleAction = new Notification.Action(R.drawable.ic_power_settings_new_black_24dp, context.getString(R.string.toggle_wakey), actionPendingIntent);

notificationBuilder= new Notification.Builder(context)
    .setContentTitle(context.getString(R.string.app_name))
    .setContentIntent(contentIntent)
    .addAction(_toggleAction);

if (Android.os.Build.VERSION.SDK_INT >= Android.os.Build.VERSION_CODES.O) {
    notificationBuilder.setChannelId(NOTIFICATION_CHANNEL);
}

notificationBuilder.setSmallIcon(icon);
notificationBuilder.setContentText(contentText);
_toggleAction.title = actionText;

int priority = getNotificationPriority(context);
notificationBuilder.setPriority(priority);
notificationBuilder.setOngoing(true);

Notification notification = notificationBuilder.build();
notificationManager.notify(NOTIFICATION_ID, notification);

そして、ここに私が得ている警告があります: enter image description here

40
jkane001

私はすべてが答えにつながるいくつかのことを学んだと思います:

  1. Playストアを含まないイメージのエミュレーターデバイスを使用していました。
  2. 画像のGoogle Play Servicesのバージョンは最新ではなかったため、アップグレードが必要であることを通知する通知を受け取っていたはずです。その通知はチャネルに適用されなかったため、表示されませんでした。
  3. Android St​​udioでlogcatを[選択したアプリケーションのみを表示]ではなく[フィルターなし]に設定すると、問題の通知がPlay Servicesの[更新が必要]通知であることを示すログが見つかりました。

そのため、Playストアを含む画像に変更し、通知を適切に表示しました(おそらく、その通知のチャンネルはPlayストアによって設定されるのでしょうか?)。最新のGoogle Playサービスに更新して、以来、その警告を見ていません。

つまり、長い話(遅すぎる)-Android Oで、Google Play Servicesを使用してエミュレータでテストしている場合、Playストアが含まれている画像を選択するか、トーストを無視します(幸運を祈ります)それです!)。

35
jkane001

最初に通知チャネルを作成します。

 public static final String NOTIFICATION_CHANNEL_ID = "4565";
//Notification Channel
        CharSequence channelName = NOTIFICATION_CHANNEL_NAME;
        int importance = NotificationManager.IMPORTANCE_LOW;
        NotificationChannel notificationChannel = new NotificationChannel(NOTIFICATION_CHANNEL_ID, NOTIFICATION_CHANNEL_NAME, importance);
        notificationChannel.enableLights(true);
        notificationChannel.setLightColor(Color.RED);
        notificationChannel.enableVibration(true);
        notificationChannel.setVibrationPattern(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400});


NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.createNotificationChannel(notificationChannel);

次に、コンストラクターでチャネルIDを使用します。

final NotificationCompat.Builder builder = new NotificationCompat.Builder(context, NOTIFICATION_CHANNEL_ID)
                .setDefaults(Notification.DEFAULT_ALL)
                .setSmallIcon(R.drawable.ic_timers)
                .setVibrate(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400})
                .setSound(null)
                .setChannelId(NOTIFICATION_CHANNEL_ID)
                .setContent(contentView)
                .setPriority(NotificationCompat.PRIORITY_DEFAULT)
                .setLargeIcon(picture)
                .setTicker(sTimer)
                .setContentIntent(pendingIntent)
                .setAutoCancel(false);
7
Gulzar Bhat

私は同じ問題を抱えていて、コンストラクタを使用して解決しました

new Notification.Builder(Context context, String channelId)非推奨 onAPIレベル> = 26(Android O)の代わりに:new NotificationCompat.Builder(Context context)

NotificationBuilderが非推奨のコンストラクターを使用してビルドされている場合、次のコードは機能しません。

if (Android.os.Build.VERSION.SDK_INT >= Android.os.Build.VERSION_CODES.O) {
notificationBuilder.setChannelId(NOTIFICATION_CHANNEL);}
6
Robert Ramonet

前にチャネルを作成する必要があります。

private void createNotificationChannel() {
        // Create the NotificationChannel, but only on API 26+ because
        // the NotificationChannel class is new and not in the support library
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            CharSequence name = getString(R.string.channel_name);
            String description = getString(R.string.channel_description);
            int importance = NotificationManager.IMPORTANCE_DEFAULT;
            NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name, importance);
            channel.setDescription(description);
            // Register the channel with the system; you can't change the importance
            // or other notification behaviors after this
            NotificationManager notificationManager = getSystemService(NotificationManager.class);
            notificationManager.createNotificationChannel(channel);
        }
}

public void notifyThis(String title, String message) {
        NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this, CHANNEL_ID)
                .setSmallIcon(R.drawable.green_circle)
                .setContentTitle(title)
                .setContentText(message)
                .setPriority(NotificationCompat.PRIORITY_DEFAULT);

        NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);

        // notificationId is a unique int for each notification that you must define
        notificationManager.notify(0, mBuilder.build());
}

最後に、このメソッドを呼び出します。

createNotificationChannel();
notifyThis("My notification", "Hello World!");
4

次のコードを使用して通知を作成します。

    Notification notification = new Notification.Builder(MainActivity.this)
              .setContentTitle("New Message")
                        .setContentText("You've received new messages.")
                        .setSmallIcon(R.mipmap.ic_launcher)
                        .setChannelId(channelId)
                        .build();

使用していない:

Notification notification = new NotificationCompat.Builder(MainActivity.this)
                    .setContentTitle("Some Message")
                    .setContentText("You've received new messages!")
                    .setSmallIcon(R.mipmap.ic_launcher)
                    .setChannel(channelId)
                    .build();
2
Abhilash Das

最初にNotificationChannelを作成する必要があります

val notificationChannel = NotificationChannel("channelId", "channelName", NotificationManager.IMPORTANCE_DEFAULT)
notificationManager.createNotificationChannel(notificationChannel);

これは、API 26+の通知を表示する唯一の方法です

1
dr3k

私は同じ問題に直面していました。 NotificationChannelを作成し、その新しく作成されたチャネルを通知マネージャーに追加することで解決しました。

0
user3724755