开发者

Android, accessing internal sound files as resource IDs

I need to send some feedback to user by playing a click sound. I'm trying to use Medi开发者_JAVA百科aPlayer.create () with built in OGG sound files, mainly KeypressStandard.ogg.

How do I refer to these files as resource IDs?


The files should be in the raw folder and you can refer to it by id with R.raw.KeypressStandard


For anybody interested in this question, found a solution like this:

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

I fired this inside an AsyncTask where I do my visual feedback chores, in onPreExecute() I draw "selected" state, play click sound and wait for 300mS. in onPostExecute(), I redraw object and free resources, works very nice, sample code:

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
    }       
}

By the way, Effect_Tick.ogg its the one that fires when you press a button. It seems that these file names are pretty much Android standard, found in many different devices signed with Android copyright disclaimer.


If you want to use your device resources you can get them without hard-coding, using RingtoneManager or ToneGenerator.

Uri sound_uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)

You can also look for free audio files on the web. Check this: https://rcptones.com/dev_tones/

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜