You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何为定时通知设置设备默认闹钟铃声?

Fix: Alarm Tone Not Playing for Notification (Vibration Only)

Hey there! Let's troubleshoot why your alarm-style notification is only vibrating and not playing the alarm tone. I've spotted a couple of key issues in your setup, especially since Android 8.0 (API 26) introduced notification channels which changed how notification sounds work.

1. Missing/Incorrect Notification Channel Setup (Critical for Android O+)

Starting with Android 8.0, all notifications must belong to a notification channel, and the channel's settings (like sound, importance) override individual notification builder settings. Your code uses Receiver.NOTIFICATION_CHANNEL_ID, but if you haven't created this channel properly, the sound won't play.

Here's how to create the channel with the correct alarm tone and high priority:

// Add this code in your Application class, Activity onCreate(), or Receiver's onReceive() (before building the notification)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    // Define the channel
    NotificationChannel alarmChannel = new NotificationChannel(
        Receiver.NOTIFICATION_CHANNEL_ID,
        "Alarm Notifications",
        NotificationManager.IMPORTANCE_HIGH // Required for sound + pop-up behavior
    );
    alarmChannel.setDescription("Notifications using alarm-style ringtone");
    
    // Set the alarm tone for the channel
    Uri alarmTone = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
    AudioAttributes alarmAudioAttrs = new AudioAttributes.Builder()
        .setUsage(AudioAttributes.USAGE_ALARM) // Mark this as alarm-type audio
        .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
        .build();
    alarmChannel.setSound(alarmTone, alarmAudioAttrs);
    
    // Configure vibration (if needed)
    alarmChannel.enableVibration(true);
    alarmChannel.setVibrationPattern(new long[]{500, 500, 500}); // Custom vibration pattern
    
    // Register the channel with the system
    NotificationManager notificationManager = getSystemService(NotificationManager.class);
    notificationManager.createNotificationChannel(alarmChannel);
}

2. Adjust Your Notification Builder Code

Once the channel is set up, you can simplify your builder (since channel settings will take precedence). Here's the updated getNotification method:

private Notification getNotification(String content) {
    NotificationCompat.Builder builder = new NotificationCompat.Builder(
        this, Receiver.NOTIFICATION_CHANNEL_ID
    );
    
    builder.setContentTitle("Title")
           .setSmallIcon(R.drawable.x)
           .setPriority(NotificationCompat.PRIORITY_MAX)
           .setDefaults(Notification.DEFAULT_VIBRATE | Notification.DEFAULT_LIGHTS)
           .setContentText(content)
           .setAutoCancel(true);
    
    // Optional: For pre-O devices, explicitly set the sound with audio attributes
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
        Uri alarmTone = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
        AudioAttributes alarmAudioAttrs = new AudioAttributes.Builder()
            .setUsage(AudioAttributes.USAGE_ALARM)
            .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
            .build();
        builder.setSound(alarmTone, alarmAudioAttrs);
    }
    
    return builder.build();
}

3. Verify Device Settings

  • Ensure your app has notification permissions enabled (check Settings > Apps > [Your App] > Notifications).
  • Go to the same notification settings page, find the "Alarm Notifications" channel you created, and confirm:
    • The channel isn't muted
    • The sound is set to the default alarm tone
    • Importance is set to "High" or "Urgent"

Why Your Original Code Didn't Work

On Android 8.0+, your builder.setSound(alarmTone) is ignored because the notification channel's sound settings take priority. Without creating the channel with IMPORTANCE_HIGH and the alarm tone, the system won't play any sound—only vibration if enabled.

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

火山引擎 最新活动