项目场景:
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);
主要看修改的地方就行,大概步骤就是:
- 设置字符串channel ID 和字符串 channel Name
- 然后创建NotificationChannle 类,并且参数为id和name
- 然后在builder设置的时候,添加上setChannelId
- 最后manager.createNotificationChannel()就行了。
结语
最后:写这篇log,记录下错误,下次不要再犯了。
世界上只有一种真正的英雄主义,那就是看清了生命的真相,并且仍然热爱它。
版权声明:本文为weixin_43105513原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。