今天学习android的通知功能时,发现
new NotificationCompat.Builder(MainActivity.this)
并且运行app时,发现不能正常的出现通知效果,反而报错
经过在网上查询后,得知解决方法
Android O 版本后,该方法被以下方法取代:
NotificationCompat.Builder(Context context, String channelId)
修改后的代码,如下:
NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
Notification notification = new NotificationCompat.Builder(MainActivity.this, "001")
.setContentTitle("This is content title")
.setContentText("This is content text")
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.mipmap.ic_launcher)
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
.build();
notificationManager.notify(1, notification);
其中,第一个参数是context,第二个参数代表channelId。此时,——没有了,但是运行app时,依旧报错。
再次搜索发现高版本的模拟器或手机还需要开启渠道才能显示通知,是因为我没有创建channel,最终代码如下:
NotificationChannel notificationChannel = null;
NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
//或者if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
notificationChannel = new NotificationChannel("001", "channel_name", NotificationManager.IMPORTANCE_HIGH);
notificationManager.createNotificationChannel(notificationChannel);
}
Notification notification = new NotificationCompat.Builder(MainActivity.this, "001")
.setContentTitle("This is content title")
.setContentText("This is content text")
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.mipmap.ic_launcher)
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
.build();
notificationManager.notify(1, notification);
最后,app运行正常
Button button3 = findViewById(R.id.b3);
button3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
Intent intent = new Intent(MainActivity.this, Main2Activity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(MainActivity.this, 0,intent,0);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
String channelId = "default";
String channelName = "默认通知";
//new NotificationChannel(channelId, channelName, NotificationManager.IMPORTANCE_HIGH)
notificationManager.createNotificationChannel(new NotificationChannel(channelId, channelName, NotificationManager.IMPORTANCE_HIGH));
}
Notification notification = new NotificationCompat.Builder(MainActivity.this, "default")
.setContentTitle("title")
.setContentText("text")
.setDefaults(NotificationCompat.DEFAULT_ALL)
.setSmallIcon(R.mipmap.ic_launcher)
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
.setWhen(System.currentTimeMillis())
.setContentIntent(pendingIntent)
.setSound(Uri.fromFile(new File("/system/media/audio/ringtones/luna.ogg")))
.setVibrate(new long[]{0,1000,1000,1000})
.setLights(Color.GREEN, 1000, 1000)
.setAutoCancel(true)
.build();
notificationManager.notify(1, notification);
}
});