我使用意图选择器选择从SD卡加载URI的声音
Intent loadIntent = new Intent();
loadIntent.setAction(Intent.ACTION_GET_CONTENT);
loadIntent.setType("audio/*");
startActivityForResult(loadIntent.createChooser(loadIntent, "Select Audio"),
SOUND_LOAD_REQUEST);}
我能够使用几种不同的方式在onActivityResult中获取数据和URI
if (requestCode == SOUND_LOAD_REQUEST)
if (resultCode == RESULT_OK) { //make sure the request was successful
Uri soundUri1 = data.getData();
String soundPath = data.getDataString();
Uri soundUri2 = Uri.parse(soundPath);
pathTwo = soundUri.getEncodedPath();
soundPath产生内容:// media / external / audio / media / 1005
pathTwo yield / external / audio / media / 1005
我尝试从上方获取两个URI,并从上方获取两个路径并将它们加载到MediaPlayer和soundPool中,我似乎无法成功加载声音。
以下是我的加载方式:
mloadedSound = mSoundPool.load(pathTwo, 1);
mSoundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener(){
@Override
public void onLoadComplete(SoundPool mSoundPool, int sampleId, int status) {
loaded = true;
}
});
或
MediaPlayer mediaPlayer = new MediaPlayer();
try {
mediaPlayer.setDataSource(pathFive)
loaded=true;
}catch (Exception ex){
loaded=false;
throw new RuntimeException("Sound did not load");
}
if(loaded=true) {mediaPlayer.prepareAsync();
}
我使用这两种方法都会出现加载错误。对于soundpool,它说'#34;声音没有加载"对于媒体播放器,它不会运行代码。 我不确定mediaPlayer或soundPool是否更适合应用程序。我只用一个按钮加载来自SD卡的声音并用一秒钟播放声音。我更喜欢soundPool,因为它简单,但我不知道它是否可以处理更大的mp3文件。
有关如何加载URI的任何建议?当我尝试将URI加载到MediaPlayer时,我得到一个失败的IOException。 我是否必须使用contentResolvers或MediaStore来解析URI?任何帮助或想法赞赏。
答案 0 :(得分:2)
我修好了。似乎错误是在KitKat中你必须声明权限android.permission.READ_EXTERNAL_STORAGE“。 我最初没有收到此错误,因为MediaPlayer的onClickListener位于onCreate方法而不是OnActivityResultMethod。 我把所有工作都搞定了,并且已经将我的加载按钮代码和我的onActivityResultCode发布在下面,供其他可能遇到此问题的人使用。
//Load Sound Button
final View loader = findViewById(R.id.load_button);
loader.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent loadIntent = new Intent();
loadIntent.setAction(ACTION_GET_CONTENT);
loadIntent.setType("audio/*");
startActivityForResult(createChooser(loadIntent, "Select Audio"), SOUND_LOAD_REQUEST);}
});
//End of Load Sound Button
&安培;
//Start of onActivityResult
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == SOUND_LOAD_REQUEST)
if (resultCode == RESULT_OK) {
mediaPlayer.reset();
Uri soundUri = data.getData(); Log.i(TAG, "Intent data" + data.getData().toString());
try {
mediaPlayer.setDataSource(this, soundUri);
} catch (IOException e) {
e.printStackTrace();
}
mediaPlayer.prepareAsync();
//Play Sound Button
final View mrButton = findViewById(R.id.push_button);
mrButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(mediaPlayer.isPlaying()){
mediaPlayer.pause();
}else{
mediaPlayer.start();
}
}
});
//End of Play Sound Button
}
}
//End of onActivityResult
快乐编码