我使用onTouchListener对Fragment内的ImageView进行了编程,以便每次单击它时都会播放一个音频文件(几乎是SoundBoard按钮)。在测试它时,我发现几次单击后音频就会停止播放,并且我在一个论坛上了解到,可以通过在每次单击时重置MediaPlayer来解决此问题。事实是,为了重置MediaPlayer,我还需要setDataSource(),无论我尝试使用哪种路径,它都会不断抛出IOExeptions。
该文件名为johnnyyy.ogg,我已经尝试过:
Uri dir = Uri.parse("android.resource://" + getActivity().getPackageName() + "/raw/johnnyyy");
Uri dir = Uri.parse("android.resource://" + getActivity().getPackageName() + "/" + R.raw.johnnyyy)
Uri dir = Uri.parse("android.resource://" + getActivity().getPackageName() + "/app/main/res/raw/johnnyyy");
他们都不起作用,这让我发疯。我该如何正确设置路径?如果有帮助,这里是其余的侦听器:
b2.setOnTouchListener(new View.OnTouchListener() {
ImageView bg2 = (ImageView)view.findViewById(R.id.bg2);
ImageView pb2 = (ImageView)view.findViewById(R.id.play2);
TextView tit2 = (TextView)view.findViewById(R.id.audio2);
@Override
public boolean onTouch(View view, MotionEvent event) {
MediaPlayer mp = MediaPlayer.create(getContext(), R.raw.johnnyyy);
if(event.getAction()==MotionEvent.ACTION_DOWN){
bg2.setBackgroundColor(getResources().getColor(R.color.pressed));
pb2.setImageResource(R.mipmap.play);
tit2.setTextColor(getResources().getColor(R.color.colorPrimary));
return true;
}
if(event.getAction()==MotionEvent.ACTION_UP){
bg2.setBackgroundColor(getResources().getColor(R.color.colorPrimary));
pb2.setImageResource(R.mipmap.ic_action_navigation_more_vert);
tit2.setTextColor(getResources().getColor(R.color.colorSecondary));
Uri dir = Uri.parse("android.resource://" + getActivity().getPackageName() + "/" + R.raw.johnnyyy);
mp.reset();
mp.setDataSource(getContext(), dir);
mp.start();
return true;
}
return true;
}
});
johnny.ogg在此文件夹中: Project path