question: private static Uri UriFromMrl ( String mrl ) { final char array [ ] = mrl . toCharArray ( ) ; final StringBuilder sb = new StringBuilder ( array . length ) ; for ( int i = 0 ; i < array . length ; ++ i ) { final char c = array [ i ] ; if ( c == '%' ) { if ( array . length - i < 3 ) throw new IllegalArgumentException ( "bad mrl format" ) ; final int hex = Integer . parseInt ( new String ( array , i + 1 , 2 ) , 16 ) ; if ( URI_AUTHORIZED_CHARS . indexOf ( hex ) != - 1 ) { sb . append ( ( char ) hex ) ; i += 2 ; continue ; } } sb . append ( c ) ; } return Uri . parse ( sb . toString ( ) ) ; }
target:  VLC authorize only "-._~" in Mrl format, android Uri authorize "_-!.~'()*". Therefore, decode the characters authorized by Android Uri when creating an Uri from VLC.