Android,作为资源ID访问内部声音文件
我需要发送一些反馈给用户播放点击的声音。我正在尝试将MediaPlayer.create()与内置的OGG声音文件一起使用,主要是KeypressStandard.OGGAndroid,作为资源ID访问内部声音文件,android,resources,audio,Android,Resources,Audio,我需要发送一些反馈给用户播放点击的声音。我正在尝试将MediaPlayer.create()与内置的OGG声音文件一起使用,主要是KeypressStandard.OGG 如何将这些文件称为资源id?文件应位于原始文件夹中,您可以使用R.raw.KeypressStandard通过id将其引用。文件应位于原始文件夹中,您可以使用R.raw.KeypressStandard通过id将其引用给对此问题感兴趣的任何人,找到了如下解决方案: MediaPlayer mp = MediaPlayer.cr
如何将这些文件称为资源id?文件应位于原始文件夹中,您可以使用
R.raw.KeypressStandard
通过id将其引用。文件应位于原始文件夹中,您可以使用R.raw.KeypressStandard
通过id将其引用给对此问题感兴趣的任何人,找到了如下解决方案:
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
}
}
私有类反馈处理程序扩展异步任务{
MediaPlayer mp;
@凌驾
受保护的Void doInBackground(Void…arg0){
返回null;
}
@凌驾
受保护的void onPostExecute(void结果){
super.onPostExecute(结果);
mp.release();//可用资源
mp=null;//帮助GC
myDrawUnselectedState(myObject);//绘制正常状态
ImageView iv=(ImageView)findViewById(R.id.myobjectcontainer);
iv.invalidate();//标记要刷新的UI
}
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
myDrawSelectedState(myObject);//绘制选定对象
ImageView iv=(ImageView)findViewById(R.id.mycontainer);
iv.invalidate();//刷新标记
mp=MediaPlayer.create(getApplicationContext(),Uri.parse(“/system/media/audio/ui/Effect_Tick.ogg”);
mp.start();//播放声音
SystemClock.sleep(300);//稍等一下,让用户看到效果
}
}
顺便说一句,Effect_Tick.ogg是当你按下按钮时触发的。似乎这些文件名几乎都是Android标准的,在许多使用Android版权免责声明签署的不同设备中都可以找到。对于任何对此问题感兴趣的人,都可以找到如下解决方案:
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
}
}
私有类反馈处理程序扩展异步任务{
MediaPlayer mp;
@凌驾
受保护的Void doInBackground(Void…arg0){
返回null;
}
@凌驾
受保护的void onPostExecute(void结果){
super.onPostExecute(结果);
mp.release();//可用资源
mp=null;//帮助GC
myDrawUnselectedState(myObject);//绘制正常状态
ImageView iv=(ImageView)findViewById(R.id.myobjectcontainer);
iv.invalidate();//标记要刷新的UI
}
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
myDrawSelectedState(myObject);//绘制选定对象
ImageView iv=(ImageView)findViewById(R.id.mycontainer);
iv.invalidate();//刷新标记
mp=MediaPlayer.create(getApplicationContext(),Uri.parse(“/system/media/audio/ui/Effect_Tick.ogg”);
mp.start();//播放声音
SystemClock.sleep(300);//稍等一下,让用户看到效果
}
}
顺便说一句,Effect_Tick.ogg是当你按下按钮时触发的。看起来这些文件名几乎都是Android标准的,在许多使用Android版权免责声明签署的不同设备中都可以找到。如果你想使用你的设备资源,你可以使用RingtoneManager或ToneGenerator,不必硬编码就可以获得它们
Uri sound_uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)
你也可以在网上寻找免费的音频文件。选中此项:如果您想使用设备资源,可以使用RingtoneManager或ToneGenerator,无需硬编码即可获得这些资源
Uri sound_uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)
你也可以在网上寻找免费的音频文件。选中此项:我知道,我想使用内置的声音,如/system/media/audio/ui/KeypressStandard.ogg。有什么线索吗?我建议你把这个文件复制到你的应用程序中,因为不是所有的android手机都有这个声音文件。。。并检查版权:).Nevermind,找到了如何操作->MediaPlayer.create(getApplicationContext(),Uri.parse(“/system/media/audio/ui/KeypressStandard.ogg”);我知道,我想使用内置的声音,比如/system/media/audio/ui/KeypressStandard.ogg。有什么线索吗?我建议你把这个文件复制到你的应用程序中,因为不是所有的android手机都有这个声音文件。。。并检查版权:).Nevermind,找到了如何操作->MediaPlayer.create(getApplicationContext(),Uri.parse(“/system/media/audio/ui/KeypressStandard.ogg”);