Home » Android » Android 26 (O) Notification doesn't display Action Icon

Android 26 (O) Notification doesn't display Action Icon

Posted by: admin June 15, 2020 Leave a comment

Questions:

With Android 26 (O) introducing Notification channels I have been investigating the Google supplied com.example.android.notificationchannels

This example works as expected until I attempted to add an Action to the Secondary Notification defined within the example app.

My code resembles this :-

   /**
     * 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);
    }

and 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;
    }

The Action is displayed and works as desired, however there is no Icon displayed next to the Action Title.

What have I done wrong?

My build.gradle file is shown below:-

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']

    }

}

The Android Studio details are :-

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
How to&Answers:

Notification actions do not present with icons since Nougat.

enter image description here

You’ll note that the icons are not present in the new notifications; instead more room is provided for the labels themselves in the constrained space of the notification shade. However, the notification action icons are still required and continue to be used on older versions of Android and on devices such as Android Wear.

Source: https://android-developers.googleblog.com/2016/06/notifications-in-android-n.html, ephasis mine.

To summarize, notification action icons are required and are used:

  • on older versions of Android,
  • on wearables,
  • in media style notifications.

Answer:

Try using NotificationCompat instead.It seems working for me.

NotificationCompat.Action action = new NotificationCompat.Action.Builder(R.drawable.ic_action, "YOUR_ACTION", mPendingIntent).build();