安卓notification不显示

项目场景:

Android Notification 不显示问题。

问题描述:

最近学到了Notification,所以做来了个notification的project代码如下:

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    Context mContext;
    NotificationManager manager ;
    Bitmap largeBitmap;
    public final int NOTIFID=1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mContext=MainActivity.this;
        largeBitmap = BitmapFactory.decodeResource(getResources(),R.mipmap.ic_notification_pikachu_big);
        manager=(NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        bindView();
    }

    private void bindView() {
        Button bt_main_start=findViewById(R.id.bt_main_start);
        Button bt_main_cancel=findViewById(R.id.bt_main_cancel);
        bt_main_start.setOnClickListener(this);
        bt_main_cancel.setOnClickListener(this);
    }

    @RequiresApi(api = Build.VERSION_CODES.O)
    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.bt_main_start:
                Intent it=new Intent(mContext,OtherActivity.class);
                PendingIntent pit=PendingIntent.getActivity(mContext,0,it,0);
                Notification.Builder builder=new Notification.Builder(this);
                builder.setContentTitle("皮卡丘")
                        .setContentText("快使用十万伏特")
                        .setSubText("皮卡皮卡")
                        .setTicker("皮卡丘爱心发电")
                        .setSmallIcon(R.mipmap.ic_notification_pikachu_small)
                        .setContentIntent(pit)
                        .setLargeIcon(largeBitmap)
                        .setWhen(System.currentTimeMillis())
                        .setAutoCancel(true);
                Notification notify1= builder.build();
                manager.notify(NOTIFID,notify1);
                break;

            case R.id.bt_main_cancel:
            manager.cancel(NOTIFID);
            break;
        }
    }
}

结果当运行的时候,当点击按钮的时候,死活不显示notification,开始以为是没获取权限,结果发现获取了权限,所以在网上找了下解决方案。

解决方案:

原来在API26开始,设置notification就必须带有channel了,不然会报错。所以当增加了channel以后,问题完美解决。
代码如下:(只贴了修改的地方)

String id="channelId"
String name="channelName";
NotificationChannel channel=new NotificationChannel(id,name,NotificationManager.IMPORTANCE_HIGH);
Notification.Builder builder=new Notification.Builder(this);
builder.setContentTitle("皮卡丘")
       .setContentText("快使用十万伏特")
       .setChannelId(id)
       .setSubText("皮卡皮卡")
       .setTicker("皮卡丘爱心发电")
       .setSmallIcon(R.mipmap.ic_notification_pikachu_small)
       .setContentIntent(pit)
       .setLargeIcon(largeBitmap)
       .setWhen(System.currentTimeMillis())
       .setAutoCancel(true);
Notification notify1= builder.build();
manager.createNotificationChannel(channel);
manager.notify(NOTIFID,notify1);

主要看修改的地方就行,大概步骤就是:

  1. 设置字符串channel ID 和字符串 channel Name
  2. 然后创建NotificationChannle 类,并且参数为id和name
  3. 然后在builder设置的时候,添加上setChannelId
  4. 最后manager.createNotificationChannel()就行了。

结语

最后:写这篇log,记录下错误,下次不要再犯了。

世界上只有一种真正的英雄主义,那就是看清了生命的真相,并且仍然热爱它。


版权声明:本文为weixin_43105513原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。