Android, доступ к внутренним звуковым файлам в качестве идентификаторов ресурсов - PullRequest
1 голос
/ 17 августа 2011

Мне нужно отправить отзыв пользователю, проиграв звук щелчка. Я пытаюсь использовать MediaPlayer.create () со встроенными звуковыми файлами OGG, в основном KeypressStandard.ogg.

Как я называю эти файлы идентификаторами ресурсов?

Ответы [ 3 ]

2 голосов
/ 18 августа 2011

Для всех, кто интересуется этим вопросом, нашел решение, подобное этому:

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

Я запустил это в AsyncTask, где я выполняю свою работу по визуальной обратной связи, в onPreExecute () я рисую «выбранное» состояние, воспроизводлю звук щелчка и жду 300 мс. в 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 голосов
/ 17 августа 2011

Файлы должны находиться в необработанной папке, и вы можете ссылаться на них по id с R.raw.KeypressStandard

0 голосов
/ 02 апреля 2018

Если вы хотите использовать ресурсы вашего устройства, вы можете получить их без жесткого кодирования, используя RingtoneManager или ToneGenerator.

Uri sound_uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)

Вы также можете искать бесплатные аудиофайлы в Интернете. Проверьте это: https://rcptones.com/dev_tones/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...