Estoy trabajando en una aplicación (y sí, soy un principiante en el desarrollo de aplicaciones, por lo que si tiene alguna sugerencia para usar en lugar del código que estoy publicando, por favor dígalo). Estoy tratando de cargar un archivo de audio para procesarlo más adelante en el uso de la aplicación. pero estoy atrapado en este momento es lo siguiente. Cuando haces clic en "agregar", te lleva al explorador de archivos donde debes seleccionar un archivo de audio. Una vez que se selecciona el archivo, el nombre del archivo debe mostrarse en un TextView. El problema que tengo es que el nombre del archivo no se muestra correctamente.

Nombre de archivo de prueba: prueba de audio archivo.mp3

Dar como resultado TextView: primario% 3ADownload% 2FTest% 20audio% 20file.mp3

Por lo tanto, establece la ruta completa como TextView con% signos, etc. y no sé por qué. ¿Cómo puedo hacer que muestre solo el nombre del archivo correctamente sin la ruta completa?

Código para abrir el explorador de archivos:

Intent explorer = new Intent(Intent.ACTION_GET_CONTENT, MediaStore.Audio.Media.INTERNAL_CONTENT_URI);
        startActivityForResult(explorer, SELECT_AUDIO_FILE);

Código para recuperar el nombre de archivo y configurarlo en TextView:

audioUri = data.getData();
            File fileToProcess = new File("" + audioUri);
            String audioFileName = fileToProcess.getName();

            fileNameDisplay.setText(audioFileName);

1
Megahurtz 27 dic. 2019 a las 17:19

3 respuestas

Pasé un tiempo buscando y leyendo y terminé con el siguiente código, que muestra solo el nombre del archivo. Funciona bien en todos los emuladores y dispositivos físicos en los que lo probé.

Uri returnUri = data.getData();
            Cursor returnCursor =
                    getContentResolver().query(returnUri, null, null, null, null);

            int nameIndex = returnCursor.getColumnIndex(OpenableColumns.DISPLAY_NAME);

            returnCursor.moveToFirst();

            fileNameDisplay.setText(returnCursor.getString(nameIndex));
0
Megahurtz 28 dic. 2019 a las 11:47

Podrías probar algo como esto. El% 2F es una codificación de URL para una barra diagonal '/' que forma parte de la ruta a su archivo. Al tomar el último elemento en la matriz después de la división, debería obtener la cadena 'Test% 20audio% 20file.mp3'. Luego, debe reemplazar los caracteres codificados con un carácter real.

/* String to split. */
String stringToSplit = "primary%3ADownload%2FTest%20audio%20file.mp3";
String[] tempArray;

/* delimiter */
String delimiter = "%2F";

/* given string will be split by the argument delimiter provided. */
tempArray = stringToSplit.split(delimiter);

String result = tempArray[tempArray.length - 1];
result = result.replace("%20", " ");

fileNameDisplay.setText(result);
0
Wai Ha Lee 28 dic. 2019 a las 00:23

Puedes usar "UTF-8":

try {
  audioFileName = URLDecoder.decode(String.valueOf(audioUri), "UTF-8");
} catch (UnsupportedEncodingException e) {
  e.printStackTrace();
}
0
Ehsan msz 27 dic. 2019 a las 14:31