Cómo obtener la ruta del archivo PDF en Android 11 y 12.
He intentado mucho código para obtener la ruta del PDF en Android 11 o 12, pero solo funciona en dispositivos Android 10 o anteriores.
¿Me puedes ayudar, por favor? A continuación, comparto mi código de líneas.
Llamando al Intent de esta manera
Intent intent = new Intent();
intent.setType("application/pdf");
statusAdapter = "pdf";
pos = position;
intent.setAction(Intent.ACTION_GET_CONTENT);
someActivityResultLauncher.launch(Intent.createChooser(intent, "Seleccionar PDF"));
someActivityResultLauncher = registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(),
result -> {
if (result.getResultCode() == Activity.RESULT_OK) {
// No hay códigos de solicitud
Intent data = result.getData();
if (data == null) {
// error
return;
}
try {
final Uri pdfUri = data.getData();
File pdfFile = new File(getPath(pdfUri));
long length = pdfFile.length();
length = length / 1024;
Toast.makeText(CreateSubEventActivity.this, "Ruta del archivo: " + pdfFile.getPath() + ", tamaño del archivo: " + length + " KB", Toast.LENGTH_SHORT).show();
// cargarArchivo(imageFile);
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(CreateSubEventActivity.this, "Algo salió mal", Toast.LENGTH_LONG).show();
}
}
});
Llamando a getPath de esta manera
public String getPath(Uri uri) {
String[] projection = {MediaStore.Images.Media.DATA};
Cursor cursor = getContentResolver().query(uri, projection, null, null, null);
if (cursor == null) return null;
int columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
String s = cursor.getString(columnIndex);
cursor.close();
return s;
}
davy.ai
Parece que el código proporcionado utiliza MediaStore para obtener la ruta de un archivo PDF seleccionado, lo cual no funciona en Android 11 o 12 debido a los cambios de privacidad en estas versiones.
Una solución para obtener la ruta de un archivo PDF seleccionado en Android 11 o 12 es utilizar
ContentResolver
yDocumentFile
para acceder al archivo utilizando su URI. Aquí tienes un código actualizado para el métodogetPath
:Este código verifica la versión de Android y utiliza el método adecuado para obtener la ruta. En Android 11 o 12, crea un archivo temporal en el directorio de caché de la aplicación y copia el contenido del PDF en él, lo cual permite que la aplicación acceda al archivo. En versiones anteriores, utiliza MediaStore para obtener la ruta del archivo.
¡Espero que esto ayude!