2017-06-22 54 views
2

随着Android的26(O)引入通知渠道我一直在调查谷歌提供的com.example.android.notificationchannelsAndroid的26(O)通知不显示操作图标

此示例按预期工作,直到我试图添加一个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的工作室细节是: -

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 
+1

我以为通知操作图标不显示,因为牛轧糖,只有文本。除了只显示图标的媒体样式通知。 –

+0

因为在所有平台上都使用相同的构造函数。相同的Notification对象用于在Nougat之前的平台上呈现实际通知,并在这些平台上执行* do *图标。 –

+0

许多问题都可以通过适当的研究完全避免。 https://android-developers.googleblog.com/2016/06/notifications-in-android-n.html在未来,如果您觉得自己有一些有趣的问题,并在正确的研究后找到答案,堆栈溢出(你可以回答自己的问题)。 –

回答

4

自Nougat以来,通知操作不会与图标一起显示。

enter image description here

你会注意到,该图标都没有出现在新的通知;而是在通知栏的受限空间中为标签本身提供更多空间。 但是,通知操作图标仍然是必需的,并且会继续在旧版Android和诸如Android Wear等设备上使用。

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

总之,通知操作图标是必需的,用于:

  • 在旧版本的Android,在可穿戴设备
  • 媒体风格通知。
-1

尝试使用NotificationCompat instead.It似乎为我工作。

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

我相信android.support.v7.app.NotificationCompat不支持通知频道。 – Hector