Android Studio添加Notification时出现开发者警告问题求助
Android通知功能点击按钮后异常提示的解决方法
我尝试给App添加Notification功能,编写代码后点击Button时出现一条提示信息,相关代码如下:
Kotlin代码
package com.example.notifsimple import android.app.NotificationManager import android.app.PendingIntent import android.content.Context import android.content.Intent import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import androidx.core.app.NotificationCompat import kotlinx.android.synthetic.main.activity_main.* class MainActivity : AppCompatActivity() { val id = 1234 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) btnNotif.setOnClickListener{ val notification = NotificationCompat.Builder(this) .setSmallIcon(R.drawable.android) .setContentTitle("New Animal") .setContentText("a new ") .build() val mNotificationCompat = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager mNotificationCompat.notify(id, notification) } } }
布局XML代码
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <Button android:id="@+id/btnNotif" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Notification" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout>
问题原因及修复方案
问题出在Android 8.0(API级别26)及以上版本强制要求为通知创建渠道,你的代码缺少渠道创建逻辑,导致系统无法正常显示通知,触发异常提示。
修改后的完整代码如下:
package com.example.notifsimple import android.app.NotificationChannel import android.app.NotificationManager import android.app.PendingIntent import android.content.Context import android.content.Intent import android.os.Build import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import androidx.core.app.NotificationCompat import kotlinx.android.synthetic.main.activity_main.* class MainActivity : AppCompatActivity() { val id = 1234 private val CHANNEL_ID = "animal_notification_channel" override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // 提前创建通知渠道(仅Android 8.0+生效) createNotificationChannel() btnNotif.setOnClickListener{ val notification = NotificationCompat.Builder(this, CHANNEL_ID) .setSmallIcon(R.drawable.android) .setContentTitle("New Animal") .setContentText("a new animal arrived!") .setPriority(NotificationCompat.PRIORITY_DEFAULT) .build() val mNotificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager mNotificationManager.notify(id, notification) } } private fun createNotificationChannel() { // 仅在Android 8.0及以上版本执行渠道创建 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { val channelName = "Animal Notifications" val channelDesc = "Notifications for new animal updates" val importance = NotificationManager.IMPORTANCE_DEFAULT val channel = NotificationChannel(CHANNEL_ID, channelName, importance).apply { description = channelDesc } // 注册渠道到系统 val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager notificationManager.createNotificationChannel(channel) } } }
关键修改点说明
- 添加
createNotificationChannel()方法,针对Android 8.0+系统创建通知渠道,渠道是系统管理通知的必要组件; - 修改
NotificationCompat.Builder的构造参数,新增渠道ID,将通知与创建的渠道绑定; - 补充了通知优先级设置,可根据需求调整为
PRIORITY_HIGH等不同级别。
内容的提问来源于stack exchange,提问作者Husam Abu Zina
相关产品推荐
相关产品推荐

