You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

点击按钮创建Android通知失败,附代码求技术排查解决

解决Android通知无法正常显示的问题

嘿,我瞅了下你贴的代码,大概率是踩了Android 8.0及以上版本的通知渠道坑了!从API 26开始,Android强制要求所有通知都必须归属到一个通知渠道里,不然通知根本不会显示出来。咱一步步来修复:

第一步:创建通知渠道

先写一个创建通知渠道的方法,建议在Activity的onCreate()里调用它,确保渠道提前创建好:

private void createNotificationChannel() {
    // 仅在API 26+时执行,因为通知渠道是这版本才引入的
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        CharSequence name = "登录通知渠道";
        String description = "用于显示登录成功的通知";
        int importance = NotificationManager.IMPORTANCE_DEFAULT;
        NotificationChannel channel = new NotificationChannel("LOGIN_CHANNEL_ID", name, importance);
        channel.setDescription(description);
        // 向系统注册这个渠道
        NotificationManager notificationManager = getSystemService(NotificationManager.class);
        notificationManager.createNotificationChannel(channel);
    }
}

记得在你的Activity的onCreate()里调用这个方法:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.your_layout);
    // 创建通知渠道
    createNotificationChannel();
}

第二步:修改你的Notify方法,关联通知渠道

把原来的Builder加上渠道ID,这样通知才能关联到我们刚创建的渠道:

public void Notify(View view) {
    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this, "LOGIN_CHANNEL_ID")
            .setContentTitle("LOGIN")
            .setContentText("You are login successfully")
            .setSmallIcon(R.drawable.done)
            .setPriority(NotificationCompat.PRIORITY_DEFAULT); // 低版本系统的优先级设置

    NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    notificationManager.notify(1, mBuilder.build());
}

额外检查点

除了渠道问题,还有几个地方要确认:

  • 权限问题:如果你的App目标SDK是33及以上(Android 13+),必须在AndroidManifest.xml里添加通知权限,并且动态申请:
    <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
    
    在代码里动态申请权限的逻辑可以参考:
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS) != PackageManager.PERMISSION_GRANTED) {
            ActivityResultContracts.RequestPermission requestPermission = new ActivityResultContracts.RequestPermission();
            registerForActivityResult(requestPermission, isGranted -> {
                if (!isGranted) {
                    // 权限被拒绝,提示用户开启
                }
            }).launch(Manifest.permission.POST_NOTIFICATIONS);
        }
    }
    
  • 图标问题:确保R.drawable.done这个图标存在,而且符合Android通知图标的规范(比如透明背景,避免白色块显示异常)。
  • 按钮绑定:确认布局里的按钮android:onClick属性确实设置为"Notify",拼写别错了。

这样修改后,你的通知应该就能正常弹出来啦!

内容的提问来源于stack exchange,提问作者lekhlifi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:49:24