2016-05-04 1 views
1

Я использую URI, который я перейти к MediaPlayer на андроид, как это:Weird URI поведение Java/setDataSource/MediaPlayer

mediaPlayer.setDataSource(context, Uri.parse(<uri>)); 

Когда я его с помощью Intent.createChooser, он играет один раз, то пытается сделать он снова воспроизводит результат java.io.IOException: сбой setDataSource: status = 0x80000000.

Когда я передаю URI как строку напрямую, это приводит к ошибке java.io.IOException: setDataSource failed .: status = 0x80000000, несмотря на то, что URI, выводимый селектором, всегда один и тот же.

Ури выглядит так: "content: //com.android.providers.media.documents/document/audio%3A21739".

Может кто-нибудь прокомментировать, почему это происходит?

ответ

0

Оказывается, андроид требуются некоторые странные разрешений махинации, решения использует различное отверстие в сочетании с использованием какой-то требование разрешения, что-то выход тот же Uri, но с постоянным доступом:

Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT); 
        intent.setType("*/*"); 
        intent.addCategory(Intent.CATEGORY_OPENABLE); 
        startActivityForResult(Intent.createChooser(intent, "Select file to add"), ADD_2); 

В onActivityResult :

if (resultCode == RESULT_OK) { 
       Uri uri = data.getData(); 
       final int takeFlags = data.getFlags() & Intent.FLAG_GRANT_READ_URI_PERMISSION; 
       getContentResolver().takePersistableUriPermission(uri, takeFlags); 
       Log.d(TAG, "Added track uri: " + uri); 
       playlist.add(uri.toString()); 
       adapter.notifyDataSetChanged(); 
      }