Попытка добавить песню в MediaPlayer без R.raw.audiofilename.Создание музыкального плеера, и у меня явно нет аудиофайла, упакованного вместе с приложением.
Более подробно: я создаю кнопки для добавления к представлению прокрутки и, при щелчке, запускаю песню.
Кажется, что при нажатии появляется метод нажатия.
private void addSongs() {
Toast.makeText(this, "Searching", Toast.LENGTH_SHORT).show();
ContentResolver cr = this.getContentResolver();
Cursor cursor = cr.query(BASE_URI, BASE_PROJECTION, BASE_SELECTION, null, BASE_SORTORDER);
int count;
if (cursor != null) {
count = cursor.getCount();
if (count > 0) while (cursor.moveToNext()) createButton(cursor);
}
}
private void createButton(final Cursor cursor) {
final String TITLE = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE));
final String PATH = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));
Button button = new Button(this);
button.setText(TITLE);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
MediaPlayer mediaPlayer = MediaPlayer.create(
MainActivity.this, Uri.parse(Environment.getExternalStorageDirectory().getPath()
+ "Music/" + TITLE + ".m4a")
);
mediaPlayer.start();
}
});
songList.addView(button);
}
Это почти весь код программы, и я беспокоюсь, что моя логика - здесь ошибка.
Исключение:
D/MediaPlayer: create failed:
java.io.IOException: setDataSource failed.
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1168)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1141)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1059)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1001)
at android.media.MediaPlayer.create(MediaPlayer.java:908)
at android.media.MediaPlayer.create(MediaPlayer.java:885)
at android.media.MediaPlayer.create(MediaPlayer.java:864)
at theredspy15.fosyplayer.MainActivity$1.onClick(MainActivity.java:80)
at android.view.View.performClick(View.java:6256)
at android.view.View$PerformClick.run(View.java:24701)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
Process: theredspy15.fosyplayer, PID: 24561
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.media.MediaPlayer.start()' on a null object reference
at theredspy15.fosyplayer.MainActivity$1.onClick(MainActivity.java:84)
at android.view.View.performClick(View.java:6256)
at android.view.View$PerformClick.run(View.java:24701)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
РЕДАКТИРОВАТЬ: Я использую .m4a в качестве аудио-файлов, которые я использую для тестирования приложения в эмуляторе .m4a.Изменит это позже