El intent.getPath () de onActivityResult no me da el nombre de archivo correcto

Estoy tratando de buscar un archivo de esta manera:

final Intent chooseFileIntent = new Intent(Intent.ACTION_GET_CONTENT); String[] mimetypes = {"application/pdf"}; chooseFileIntent.setType("*/*"); chooseFileIntent.addCategory(Intent.CATEGORY_OPENABLE); if (chooseFileIntent.resolveActivity(activity .getApplicationContext().getPackageManager()) != null) { chooseFileIntent.putExtra(Intent.EXTRA_MIME_TYPES, mimetypes); activity.startActivityForResult(chooseFileIntent, Uploader.PDF); } 

Luego en onActivityResult :

 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); } 

De acuerdo con muchos hilos, se supone que debo obtener el nombre de archivo del bash con data.getData().getPath() , el nombre del archivo que espero es my_file.pdf , pero en cambio estoy obteniendo esto:

/ document / acc = 1; doc = 28

¿Entonces lo que hay que hacer? Gracias por tu ayuda.

Estoy tratando de buscar un archivo

No con ese código. Ese código le pide al usuario que elija un contenido. Esto puede o no ser un archivo.

De acuerdo con muchos hilos, se supone que debo obtener el nombre de archivo de la intención con data.getData (). GetPath ()

Eso nunca fue correcto, aunque tendía a funcionar en versiones anteriores de Android.

¿Entonces lo que hay que hacer?

Bueno eso depende.

Si solo desea aceptar archivos, integre una biblioteca de selección de archivos en lugar de usar ACTION_GET_CONTENT .

Si está dispuesto a permitir que el usuario elija un contenido mediante ACTION_GET_CONTENT , comprenda que no tiene que ser un archivo y que no tiene que tener algo que se asemeje a un nombre de archivo. Lo más cercano que obtendrá:

  • Si getScheme() del file retorno de Uri , su algoritmo original funcionará

  • Si getScheme() del Uri devuelve content , use DocumentFile.fromSingleUri() para crear un DocumentFile , luego llame a getName() en ese DocumentFile ; esto debería devolver un “nombre para mostrar” que debería ser reconocible para el usuario.