Уведомление Android 26 (O) не отображает значок действия

В Android 26 (O) появились каналы уведомлений, и я исследовал предоставленный Google com.example.android.notificationchannels

Этот пример работает, как и ожидалось, пока я не попытался добавить Action к вторичному уведомлению, определенному в примере приложения.

Мой код похож на это: -

   /**
     * Build notification for secondary channel.
     *
     * @param title Title for notification.
     * @param body Message for notification.
     * @return A Notification.Builder configured with the selected channel and details
     */
    @RequiresApi(api = Build.VERSION_CODES.O)
    public Notification.Builder getNotification2(String title, String body) {
        return new Notification.Builder(getApplicationContext(), SECONDARY_CHANNEL)
                .setContentTitle(title)
                .setContentText(body)
                .setActions(buildAction())
                .setSmallIcon(getSmallIcon())
                .setAutoCancel(true);
    }

и buildAction(): -

   @TargetApi(Build.VERSION_CODES.KITKAT_WATCH)
    private Notification.Action buildAction() {

        final Intent intent = new Intent(this, SecondActivity.class);
        final PendingIntent pendingIntent =  PendingIntent.getActivity(this, 1729, intent, PendingIntent.FLAG_UPDATE_CURRENT );

        final Notification.Action myAction = new Notification.Action.Builder(R.drawable.ic_action_name, "RETRY", pendingIntent).build();

        return myAction;
    }

Действие отображается и работает по желанию, однако рядом с названием действия не отображается значок.

Что я сделал не так?

Мой файл build.gradle показан ниже:

buildscript {
    repositories {
        jcenter()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.0-alpha4'
    }
}

apply plugin: 'com.android.application'

repositories {
    jcenter()
}

dependencies {
    compile "com.android.support:support-v4:26.+"
    compile "com.android.support:support-v13:26.+"
    compile "com.android.support:cardview-v7:26.+"
    compile "com.android.support:appcompat-v7:26.+"
}

// The sample build uses multiple directories to
// keep boilerplate and common code separate from
// the main sample code.
List<String> dirs = [
    'main',     // main sample code; look here for the interesting stuff.
    'common',   // components that are reused by multiple samples
    'template'] // boilerplate code that is generated by the sample template process

android {
    compileSdkVersion 26
    buildToolsVersion "26.0.0"

    // Values declared here override the ones declared in AndroidManifest.xml
    defaultConfig {
        minSdkVersion 16
        targetSdkVersion 26
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }

    sourceSets {
        main {
            dirs.each { dir ->
                java.srcDirs "src/${dir}/java"
                res.srcDirs "src/${dir}/res"
            }
        }
        androidTest.setRoot('tests')
        androidTest.java.srcDirs = ['tests/src']

    }

}

Детали Android Studio: -

Android Studio 3.0 Canary 4
Build #AI-171.4101728, built on June 15, 2017
JRE: 1.8.0_112-release-b736 x86_64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
Mac OS X 10.11.6

person Hector    schedule 22.06.2017    source источник
comment
Я думал, что значки действий уведомлений не отображаются с Nougat, только текст. Помимо уведомления в стиле мультимедиа, которое показывает только значки.   -  person Eugen Pechanec    schedule 22.06.2017
comment
Потому что на всех платформах используется один и тот же конструктор. Тот же объект Notification используется для рендеринга фактического уведомления на платформах до Nougat, и на этих платформах действия do имеют значки.   -  person Eugen Pechanec    schedule 23.06.2017
comment
И многих вопросов можно полностью избежать путем надлежащего исследования. android-developers.googleblog.com/2016/06/ В будущем, если вы почувствуете, что у вас есть интересный вопрос и вы нашли ответ после надлежащего исследования, поделитесь обоими на переполнении стека (вы можете ответить на свои вопросы).   -  person Eugen Pechanec    schedule 23.06.2017
comment
Вам, сэр, нужно расширить свое представление: stackoverflow.com/questions/41503972/ stackoverflow.com/questions/42082882/ Не упоминалось в I/O, потому что это не новости.   -  person Eugen Pechanec    schedule 23.06.2017
comment
Один я не сэр. Во-вторых, вопрос, который вы связываете как дубликат, конкретно показывает NotificationCompat.Action action = new NotificationCompat.Action.Builder(R.drawable.ic_share, pendingIntent).build(), где я не использую библиотеку Compat.   -  person Hector    schedule 23.06.2017
comment
Аналог поддержки отражает новейший API платформы, позволяя разработчикам использовать один и тот же API (за исключением суффикса Compat) во всех версиях Android (избавляя нас от множества ветвей if-else). По сути, на новых платформах при непосредственном использовании поддержки или API платформы результат тот же. Вы можете, и я призываю вас проверить это поведение самостоятельно.   -  person Eugen Pechanec    schedule 23.06.2017


Ответы (2)


Действия уведомлений не отображаются со значками, начиная с Nougat.

введите здесь описание изображения

Вы заметите, что в новых уведомлениях нет значков; вместо этого больше места предоставляется для самих меток в ограниченном пространстве тени уведомлений. Однако значки уведомлений по-прежнему необходимы и по-прежнему используются в более ранних версиях Android и на таких устройствах, как Android Wear.

Источник: https://android-developers.googleblog.com/2016/06/notifications-in-android-n.html, выделение мое.

Подводя итог, значки действий уведомлений необходимы и используются:

  • на старых версиях Android,
  • на носимых устройствах,
  • в уведомлениях в стиле мультимедиа.
person Eugen Pechanec    schedule 23.06.2017
comment
Ради интереса... Я добавил символы эмодзи в строки меток, так что по крайней мере рядом с текстом есть графика. - person Dave; 01.04.2021

Попробуйте вместо этого использовать NotificationCompat. Кажется, это работает для меня.

NotificationCompat.Action action = new NotificationCompat.Action.Builder(R.drawable.ic_action, "YOUR_ACTION", mPendingIntent).build();
person Bhavesh Patadiya    schedule 22.06.2017
comment
Я считаю, что android.support.v7.app.NotificationCompat не поддерживает каналы уведомлений. - person Hector; 22.06.2017