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

如何在React Native中为通知跳转页面集成原生音效

在React Native的FullScreenActivity中实现通知跳转后的自动音效播放

当用户点击恐慌警报通知跳转到FullScreenActivity时,要实现自动播放原生音效,只需在该Activity中添加音频播放逻辑即可,以下是具体步骤:

1. 添加音效资源

将你的警报音效文件(例如alert_sound.mp3)复制到Android项目的app/src/main/res/raw目录下——如果raw目录不存在,手动创建一个即可。

2. 修改FullScreenActivity实现音效播放

使用MediaPlayer处理较长的警报音频播放,在Activity生命周期中管理资源避免内存泄漏:

package com.limestone.community;

import android.media.MediaPlayer;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;

public class FullScreenActivity extends AppCompatActivity {
    private MediaPlayer mediaPlayer;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 替换为你的实际布局文件
        setContentView(R.layout.activity_fullscreen);

        // 页面打开时自动播放音效
        playAlertSound();
    }

    private void playAlertSound() {
        // 初始化MediaPlayer,加载raw目录下的音效文件
        mediaPlayer = MediaPlayer.create(this, R.raw.alert_sound);
        // 若需要循环播放,取消下面注释
        // mediaPlayer.setLooping(true);
        
        try {
            mediaPlayer.start();
        } catch (IllegalStateException e) {
            e.printStackTrace();
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        // 释放MediaPlayer资源
        if (mediaPlayer != null) {
            if (mediaPlayer.isPlaying()) {
                mediaPlayer.stop();
            }
            mediaPlayer.release();
            mediaPlayer = null;
        }
    }
}

备选方案:使用SoundPool播放短音效

如果你的警报是短提示音,用SoundPool更合适,它的播放延迟更低:

package com.limestone.community;

import android.media.AudioManager;
import android.media.SoundPool;
import android.os.Build;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;

public class FullScreenActivity extends AppCompatActivity {
    private SoundPool soundPool;
    private int soundId;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_fullscreen);

        // 初始化SoundPool,适配不同Android版本
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            soundPool = new SoundPool.Builder()
                    .setMaxStreams(1)
                    .build();
        } else {
            soundPool = new SoundPool(1, AudioManager.STREAM_ALARM, 0);
        }

        // 加载音效文件
        soundId = soundPool.load(this, R.raw.alert_sound, 1);

        // 音效加载完成后自动播放
        soundPool.setOnLoadCompleteListener((pool, sampleId, status) -> {
            if (status == 0) {
                // 参数依次:音效ID、左音量、右音量、优先级、循环次数(-1为无限循环)、播放速率
                soundPool.play(soundId, 1.0f, 1.0f, 1, -1, 1.0f);
            }
        });
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (soundPool != null) {
            soundPool.release();
            soundPool = null;
        }
    }
}

注意事项

  • 确保音效文件格式为Android支持的类型(如MP3、WAV)。
  • 若需要更高的播放优先级,可以使用AudioManager.STREAM_ALARM音频流(如SoundPool示例中所示),这样即使手机处于静音模式,警报音效也可能被播放(取决于系统设置)。
  • 你的NotificationModule中已经正确设置了PendingIntent.FLAG_MUTABLE,适配Android 12+的要求,无需修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 10:27:04