当前位置: 首页 > 知识库问答 >
问题:

Android:OnClick播放随机. mp3从 /res/raw文件

华昕
2023-03-14

我是相当新的Android应用程序开发,我试图从 /res/raw文件夹中播放一个随机的. mp3。

到目前为止,我已经修复了这个问题,但我遇到了一个FileNotFoundException。

修正了只在第一次点击时播放一个随机声音,之后它是相同的声音,除非重新打开应用程序。

新问题现在播放随机声音,但当我多次单击按钮时,声音同时开始播放,并且仍然在日志中收到“start()mUri is null”消息

更新的代码

MediaPlayer player;
int soundIndex;
AssetFileDescriptor descriptor;

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

}


/**
 * gets a random index from an array of sounds
 * 
 * @return
 */
public int getRandomSoundIndex(){

    int soundIndex;
    int[] sound = SOUNDZ;

    Random random = new Random();
    soundIndex = random.nextInt(sound.length);

    return sound[soundIndex];
}

/**
 * Plays that random sound on button click
 * @param button
 */
public void playRandomSound(View button){

    //where button is physically located
    button = (Button) findViewById(R.id.button1);

    //get random sound index
    soundIndex = getRandomSoundIndex();

    //make media player
    player = MediaPlayer.create(this, soundIndex);

    //play sound
    player.start();

}

以下是日志:

09-21 17:42:32.528: D/MediaPlayer(4282): start()mUri为空

共有1个答案

傅茂实
2023-03-14

你这里有几个问题。

首先,在字段上调用toString()将为您提供对象实例的字符串表示,例如“public static final int com.lena.button.R$raw.laptopkeyboard1”,这不是很有用。大概,您想要getInt()

其次,原始资源不是资产,因此您不使用openFd()。相反,使用静态方法创建您的MediaPlayer实例,在您的字段上传递从getInt()获取的int。

第三,反射很慢。请不要重复。使用R.raw。班getFields()一次,缓存结果。或者,更好的是,考虑根本不使用反射,而是使用您自己的文字Java

static int[] SOUNDZ={R.raw.boom, R.raw.chaka, R.raw.laka};

(当然,用你自己的声音资源代替)

 类似资料:
  • 我需要你的帮助。我正在开发一个android应用程序,我需要从sd卡中随机播放一首歌。我尝试了这种方式: 使用这种方法,我从文件夹中随机选择一首歌曲(此文件夹仅包含mp3文件)。 然后我用这个方法播放提取的歌曲: 我想知道如何使用MediaPlayer播放智能手机sd卡上的歌曲

  • 我正在用Android(API 29)编写一个铃声应用程序,我想通过WhatsApp分享以MP3格式存储在文件夹中的声音。我正在使用此代码: 但是每次我选择聊天发送音频文件时,我都会收到WhatsApp错误,告诉我无法共享文件。我见过其他应用程序在不请求外部存储写入权限的情况下实现我想要的功能。有什么线索吗?

  • 问题内容: 我正在尝试编写一个将从Soundcloud URL播放mp3的python脚本 这是我已经做的: 我尝试了许多选项,例如更改格式,频道,费率。而且我只是从扬声器中听到奇怪的声音,我搜索了Google以播放mp3,但没有找到任何信息。 我尝试通过传递mp3中的字节来创建对象,然后仅执行play函数。我没有收到任何错误:脚本正在运行,但没有任何播放。 我正在使用Python 3和Ubunt

  • 当我使用MediaPlayer播放mp3文件时,系统会报告错误日志:。但是RealPlayer是正常的。 我发现它的错误只发生在更高的ROM版本。像4.0版本一样,它有错误。在2.3版中,它没有这个错误。 代码: 日志猫错误:

  • 问题内容: 我有以下DataFrame: 从csv文件读取DataFrame。所有具有1的行都位于最上面,然后是具有2的行,然后是具有3的行,依此类推。 我想重新整理DataFrame行的顺序,以便将所有行混合在一起。可能的结果可能是: 我该如何实现? 问题答案: 使用Pandas的惯用方式是使用数据框的方法对所有行进行采样而无需替换: 的关键字参数指定的行的分数到随机样品中返回,所以装置返回所有

  • 我遵循了本教程:http://what-when-how.com/javafx-2/playing-audio-using-the-media-classes-javafx-2-part-1/ 我有相应的资源文件夹在相应的目录中。类文件,但我仍然不能播放音频。mp3文件与教程中的不同,但我也有一个. wav等效文件,发现JavaFX可以开箱播放*. wav文件,但不能播放mp3文件。怎么回事啊?