在一个活动中选择要在另一个活动中播放的声音

Posted

技术标签:

【中文标题】在一个活动中选择要在另一个活动中播放的声音【英文标题】:Selecting a Sound in an activity to be played in another activity 【发布时间】:2017-06-01 12:12:59 【问题描述】:

我有这个想法,我不会编码,所以我在这里寻求帮助

我有两个活动第一个: XML 文件:按钮 Java File : Button 的点击监听器,使用来自 res/raw 的 SoundPool 类播放音效

--一切都很简单--

想要做的是创建第二个活动,用户可以在其中从单选按钮组中选择其他声音效果,如 Sound1 或 Sound2 ...等,以代替播放。

这是我的想法,所以请帮我编写代码,我被困了 2 周,我知道下一步是什么。

求救 =)

【问题讨论】:

【参考方案1】:

你可以定义一个全局变量来播放音效:

int activeSoundEffectRawId = R.raw.defaultSound;

然后使用 SoundPool 的 load 方法播放它。

要选择要播放的声音,您可以在启动 Activity2 的 xml 文件中添加另一个按钮:

Button btnSelectSound = (Button) findViewById (R.id.button2);
btnSelectSound.setOnClickListener(new View.OnClickListener() 
    @Override
    public void onClick(View v) 
        startActivityForResult(new Intent(Activity1.this, Activity2.class), 1000);
    
);

请务必在此处使用请求代码 1000 启动结果活动(此数字肯定可以更改)。

在您的活动 2 中,您需要选择声音的逻辑,例如“确定”按钮来保存选择。该确定按钮会将选定的声音移交给 Activity1:

Button btnOk = (Button) findViewById (R.id.ok);
btnOk.setOnClickListener(new View.OnClickListener() 
    @Override
    public void onClick(View v) 
        Intent returnIntent = new Intent();
        returnIntent.putExtra("soundRawId", selectedSoundRawId /* <- replace this with the selected sound, like R.raw.yourSound */);
        setResult(Activity.RESULT_OK,returnIntent);
        finish();
    
);

之后就可以在Activity1中设置选中的声音了:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) 
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 1000 && resultCode == Activity.RESULT_OK) 
        selectedSoundRawId = data.getIntExtra("soundRawId");
    

【讨论】:

谢谢你这么完美的作品;但我需要使用 RadioGroup 来为用户简化操作,只需选择声音并返回 Activity1 ..再次感谢您! @Claudenix 有一个 ra?

以上是关于在一个活动中选择要在另一个活动中播放的声音的主要内容,如果未能解决你的问题,请参考以下文章

如何在 apache cordova 上安排活动?

如何在 Flutter Web 中选择要上传的文件夹/文件夹?

活动从锁定屏幕开始时没有声音

当用户/选项卡/浏览器处于非活动状态时 JavaScript 播放声音

从另一个活动返回后,VideoView 上的视频播放消失

有效地为 SoundPool 加载声音(全局 SoundPool?)