android 7.0通知图标出现白色方块

时间:2017-03-29 11:21:09

标签: android android-notifications android-7.0-nougat

我正在使用以下代码段在我的Android应用中生成通知。

private void sendNotification(String contentText, String message) {

    Intent resultIntent = new Intent(this, MainActivity.class);
    resultIntent.putExtra("clear","clear");
    resultIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | 
     Intent.FLAG_ACTIVITY_CLEAR_TASK);

   PendingIntent piResult = PendingIntent.getActivity(this, 0, resultIntent,0);

    NotificationCompat.Builder builder=new NotificationCompat.Builder(this)
            .setSmallIcon(R.drawable.icon)
            .setColor(ContextCompat.getColor(getApplicationContext(),R.color.red))
            .setContentTitle("title")
            .setContentText(message)
            .setAutoCancel(true)
            .setLargeIcon(BitmapFactory.decodeResource(getResources() 
            ,R.drawable.notification))
            .setContentIntent(piResult);

    NotificationCompat.InboxStyle notification = new NotificationCompat.InboxStyle(builder);

    int i;
    for(i=0; i<messageList.size();i++){
        notification.addLine(messageList.get(i));
    }
    notification.setBigContentTitle("title");
    notification.setSummaryText(contentText);

    NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
    notificationManager.notify(NOTIFICATION_ID,notification.build());
}

它适用于android 5和6但是对于android nougat它无法正常工作

3 个答案:

答案 0 :(得分:3)

从Android版本的lollpop开始,他们对通知进行了更改。当您指定小图标时,它应具有this link中提到的特定大小。

重要的是图片应该透明并且只包含白色颜色。

您可以查看this question以获得答案

答案 1 :(得分:2)

关注Android API中的docs

  

状态栏图标仅由透明背景上的白色像素组成,Alpha混合用于平滑边缘和内部纹理。

您的整个图像,但透明部分将转换为白色(原来是白色或有颜色)。

一种解决方案是使用颜色创建轮廓图标,这样您就可以在所有Android API中使用相同的图像。一个例子可能是这个图标:

White image on a transparent backdrop

在较低版本的Android中,您会看到黑色的脸,在最后一个版本中,您将看到相同的脸但是带有白色。这是因为透明部分(看起来SO删除了透明度,你可以从here获得原始图像)。

答案 2 :(得分:1)

根据此博客here

它说

  

您会注意到新通知中没有图标;而是在通知阴影的受约束空间中为标签本身提供更多空间。但是,仍然需要通知操作图标,并继续在旧版Android和Android Wear等设备上使用。

     

如果您使用NotificationCompat.Builder构建通知以及可用的标准样式,默认情况下您将获得新的外观,而无需更改代码。