Android,访问内部声音文件作为资源ID

时间:2011-08-17 18:06:20

标签: android resources audio

我需要通过点击声音向用户发送一些反馈。我正在尝试使用内置OGG声音文件的MediaPlayer.create(),主要是KeypressStandard.ogg。

如何将这些文件称为资源ID?

3 个答案:

答案 0 :(得分:2)

这些文件应该位于原始文件夹中,您可以通过id R.raw.KeypressStandard

来引用它

答案 1 :(得分:2)

对于对这个问题感兴趣的人,找到了这样的解决方案:

MediaPlayer mp = MediaPlayer.create(getApplicationContext(), Uri.parse("/system/media/audio/ui/Effect_Tick.ogg") );
mp.start();

我在AsyncTask里面解决了这个问题,我在那里做了视觉反馈杂务,在onPreExecute()中我画了“选中”状态,播放点击声并等待300mS。在onPostExecute()中,我重绘对象和免费资源,效果非常好,示例代码:

private class FeedbackHandler extends AsyncTask<Void,Void,Void>{
    MediaPlayer mp;

    @Override
    protected Void doInBackground(Void... arg0) {
    return null;

    }

    @Override
    protected void onPostExecute(Void result) {
    super.onPostExecute(result);

    mp.release(); // free resources
    mp=null; // help GC
    myDrawUnselectedState(myObject); // draw normal state
    ImageView iv = (ImageView) findViewById(R.id.myobjectcontainer);
    iv.invalidate(); // mark UI for refresh
    }

    @Override
    protected void onPreExecute() {
    super.onPreExecute();

    myDrawSelectedState(myObject); // draw selected
    ImageView iv = (ImageView) findViewById(R.id.mycontainer);
    iv.invalidate(); // mark for refreshing
    mp = MediaPlayer.create(getApplicationContext(), Uri.parse("/system/media/audio/ui/Effect_Tick.ogg") );
    mp.start(); // play sound
    SystemClock.sleep(300); // wait a little bit for user to see effect
    }       
}

顺便说一句,Effect_Tick.ogg是按下按钮时触发的那个。似乎这些文件名几乎都是Android标准,可以在许多使用Android版权免责声明签名的不同设备中找到。

答案 2 :(得分:0)

如果您想使用您的设备资源,您可以使用RingtoneManager或ToneGenerator进行硬编码。

Uri sound_uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)

您还可以在网络上查找免费的音频文件。检查一下:https://rcptones.com/dev_tones/