2016-05-04 4 views
1
私はこのようなアンドロイド上のMediaPlayerに渡す

私はURIを使用しています:奇妙なURIの行動のJava/setDataSource/MediaPlayerの

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

私はそれがIntent.createChooserを使用して取得し、それを作るしようとして一旦果たしていますそれはjava.io.IOExceptionの結果を再現します:setDataSourceが失敗しました。:status = 0x80000000。

URIを文字列として直接渡すと、java.io.IOExceptionが発生します。セレクタによって出力されたURIが常に同じであるにもかかわらず、setDataSourceが失敗しました:status = 0x80000000。

uriは次のようになります。 "content://com.android.providers.media.documents/document/audio%3A21739"

誰かが啓発してください。なぜこれが起こるのですか?

答えて

0

が、永続的なアクセスと、Androidはいくつかの奇妙な権限のペテンを必要と、解決策が同じURI何とか出力許可要件のいくつかの並べ替えを使用して接続された別の開口部を使用していたが判明:onActivityResultで

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); 

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(); 
      }