Воспроизведение аудио без необработанной папки в Android (JAVA) - PullRequest
0 голосов
/ 07 июня 2018

Попытка добавить песню в 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.Изменит это позже

...