Для всех, кто интересуется этим вопросом, нашел решение, подобное этому:
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.