Воспроизведение аудиофайлов с внутренней памяти устройства.Это продолжает выдавать IOException на void prepare () - PullRequest
0 голосов
/ 20 мая 2018

Я хочу воспроизвести аудиофайлы, которые хранятся во внутреннем хранилище моего приложения с пользовательского устройства: здесь ниже приведен полный код извлечения и отображения списка этих аудиофайлов =

//variables of retrieving audio file from internal storage
ListView listView_phone_calls;
ArrayList<File> phone_call_list;
ArrayAdapter<File> adapter;

//variables of playing an audio file
MediaPlayer player;

    listView_phone_calls=(ListView)findViewById(R.id.listView_phone_calls);
    phone_call_list=new ArrayList<>();

    File[] file=getApplicationContext().getFilesDir().listFiles();
    for (int i=0;i<file.length;i++){
        phone_call_list.add(file[i]);
    }

    adapter=new ArrayAdapter<>(PhoneCall_Player.this,android.R.layout.simple_list_item_activated_1,phone_call_list);
    listView_phone_calls.setAdapter(adapter);

    listView_phone_calls.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

            //This is what should happen when a user clicks on a one item
            player=new MediaPlayer();
            File call_rec=(File) listView_phone_calls.getItemAtPosition(position);
            try {
                player.setDataSource(String.valueOf(call_rec));
            } catch (IOException e) {
                e.printStackTrace();
                Toast.makeText(PhoneCall_Player.this,"Sorry! File not found! "+e.getMessage(),Toast.LENGTH_SHORT).show();
            }catch (IllegalArgumentException e){
                e.printStackTrace();
                Toast.makeText(PhoneCall_Player.this,"Sorry! Something is wrong!, "+e.getMessage(),Toast.LENGTH_SHORT).show();
            }

            player.setAudioStreamType(AudioManager.STREAM_MUSIC);

            try {
                player.prepare();
            } catch (IOException e) {
                e.printStackTrace();
                Toast.makeText(PhoneCall_Player.this,"Player couldn't be prepared to play! "+e.getMessage(),Toast.LENGTH_SHORT).show();
            }
            player.start();

            player.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                @Override
                public void onCompletion(MediaPlayer mp) {
                    player.release();
                    player=null;
                }
            });
        }
    });

Всякий раз, когда янажмите на предмет, тост игрока не может быть готов к игре продолжает появляться;Я думаю, что нет никаких проблем с setDataSource ();так что не так с моими кодами.Есть ли какая-то ошибка, которую я выкладываю, которую я не вижу?Или я плохо вызываю MediaPlayer?

1 Ответ

0 голосов
/ 20 мая 2018

префикс вашего пути с file://, так что ваш путь становится file:///data/user/0/com.example.mypackagename/files/audio00001.mp3

...