В настоящее время я пытаюсь воспроизвести файл MP3 с SDCard. К сожалению, я не могу этого сделать.MediaPlayer: SecurityException в prepareAsync()
Вот что я пробовал:
private MediaPlayer _mediaPlayer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
_mediaPlayer = new MediaPlayer();
}
public void playButtonClick(View v) {
File sdcard = new File(Environment.getExternalStorageDirectory()
.getAbsolutePath());
File dir = new File(sdcard, "Music/Undone.mp3");
_mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
_mediaPlayer.setOnErrorListener(new OnErrorListener() {
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
android.util.Log.d("Error", "What? " + String.valueOf(what)
+ " Extra?" + String.valueOf(extra));
return false;
}
});
_mediaPlayer.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
_mediaPlayer.start();
}
});
try {
FileInputStream fileInputStream = new FileInputStream(dir);
fileInputStream.close();
_mediaPlayer.setDataSource(fileInputStream.getFD());
_mediaPlayer.prepareAsync();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
Проблема заключается в том, что я получаю SecurityException
при вызове _mediaPlayer.prepareAsync()
. Вот сообщение об ошибке:
02-26 22:11:19.020: W/System.err(26048): java.lang.SecurityException
02-26 22:11:19.020: W/System.err(26048): at android.media.MediaPlayer.prepareAsync(Native Method)
02-26 22:11:19.025: W/System.err(26048): at com.bert.bertmusicplayer.MainActivity.playButtonClick(MainActivity.java:53)
02-26 22:11:19.025: W/System.err(26048): at java.lang.reflect.Method.invokeNative(Native Method)
02-26 22:11:19.025: W/System.err(26048): at java.lang.reflect.Method.invoke(Method.java:511)
02-26 22:11:19.025: W/System.err(26048): at android.view.View$1.onClick(View.java:3686)
02-26 22:11:19.025: W/System.err(26048): at android.view.View.performClick(View.java:4211)
02-26 22:11:19.025: W/System.err(26048): at android.view.View$PerformClick.run(View.java:17267)
02-26 22:11:19.025: W/System.err(26048): at android.os.Handler.handleCallback(Handler.java:615)
02-26 22:11:19.025: W/System.err(26048): at android.os.Handler.dispatchMessage(Handler.java:92)
02-26 22:11:19.025: W/System.err(26048): at android.os.Looper.loop(Looper.java:137)
02-26 22:11:19.025: W/System.err(26048): at android.app.ActivityThread.main(ActivityThread.java:4898)
02-26 22:11:19.025: W/System.err(26048): at java.lang.reflect.Method.invokeNative(Native Method)
02-26 22:11:19.025: W/System.err(26048): at java.lang.reflect.Method.invoke(Method.java:511)
02-26 22:11:19.025: W/System.err(26048): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
02-26 22:11:19.025: W/System.err(26048): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
02-26 22:11:19.025: W/System.err(26048): at dalvik.system.NativeStart.main(Native Method)
Вот мои права:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" >
Просто в LogCat выход я не могу понять, в чем проблема.
Я надеюсь, что кто-то может мне помочь.
Спасибо. После большого редактирования моего кода я должен полностью контролировать это. – Siggy
@ Сигги вы можете подробно рассказать о том, что именно вы сделали именно для решения проблемы? – dangalg
О, это было давно: D Ну, это была действительно глупая ошибка: Проблемные строки: 'fileInputStream.close(); _mediaPlayer.setDataSource (fileInputStream.getFD()); ' Здесь вы видите, что я закрыл файлInputStream и попытался получить FD впоследствии. Это явно не работает. – Siggy