Delphi - Obtener ruta de un archivo seleccionado desde el explorador de archivos de android

 
Vista:

Obtener ruta de un archivo seleccionado desde el explorador de archivos de android

Publicado por Ruben (1 intervención) el 29/02/2024 19:28:28
Buenas tardes, estoy intentando obtener la ruta de un archivo seleccionado desde el explorador de archivos por defecto de android.

Este procedimiento para abrirlo

procedure TForm15.OpenFileSelector;
var
Intent: JIntent;
begin
Intent := TJIntent.Create;
Intent.setAction(TJIntent.JavaClass.ACTION_OPEN_DOCUMENT);
Intent.setType(StringToJString('*/*')); // Selecciona todos los tipos de archivos
Intent.addCategory(TJIntent.JavaClass.CATEGORY_OPENABLE);
SharedActivity.startActivityForResult(Intent, 0);

end;

Esta funcion para obtener la ruta

function TForm15.GetSelectedFilePath(const Intent: JIntent): string;
var
Uri: Jnet_Uri;
Cursor: JCursor;
ColumnIndex: Integer;
FilePath: string;
begin
Result := '';
Uri := Intent.getData;
if Assigned(Uri) then
begin
Cursor := SharedActivity.getContentResolver.query(Uri, nil, nil, nil, nil);
if Assigned(Cursor) then
begin
ColumnIndex := Cursor.getColumnIndexOrThrow(TJMediaStore_MediaColumns.JavaClass.DATA);
Cursor.moveToFirst;
FilePath := JStringToString(Cursor.getString(ColumnIndex));
Cursor.close;
Result := FilePath;
end;
end;
end;

y este para recibir la notificacion :

procedure TForm15.HandleActivityMessage(const Sender: TObject; const M: TMessage);
var
ResultNotification: TMessageResultNotification;
SelectedFilePath: string;
begin
if M is TMessageResultNotification then
begin
ResultNotification := TMessageResultNotification(M);
if ResultNotification.RequestCode = 0 then
begin
if ResultNotification.ResultCode = TJActivity.JavaClass.RESULT_OK then
begin
SelectedFilePath := GetSelectedFilePath(ResultNotification.Value);
ShowMessage('Ruta del archivo seleccionado: ' + SelectedFilePath);
rutapdf.Text:= SelectedFilePath;
end;
end;
end;
end;

Utilizo el servicio de mensajeria de delphi

TMessageManager.DefaultManager.SubscribeToMessage(TMessageResultNotification, HandleActivityMessage);

En teoria lo guarda en un edit llamado rutapdf

En versiones anteriores a android 14 si me funciona, pero lo instalo en otro movil con android 14 y se bloquea al llamar al servicio de mensajeria.

Alguien me puede ayudar porfavor??
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 65
Oro
Ha mantenido su posición en Delphi (en relación al último mes)
Gráfica de Delphi

Obtener ruta de un archivo seleccionado desde el explorador de archivos de android

Publicado por E.T. (1244 intervenciones) el 06/03/2024 22:29:24
Pudiera ser cuestión de permisos. Algún permiso de lectura de carpeta de documentos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Obtener ruta de un archivo seleccionado desde el explorador de archivos de android

Publicado por Ruben (1 intervención) el 07/03/2024 16:45:47
Si. Gracias por la ayuda. Estoy mirandolo y ha sido a raíz de actualizar mi. Móvil a Android 14. Me deja solicitar en tiempo de ejecución cualquier permiso, menos el de lectura y escritura de archivos.
Tengo tb declarados los permisos en el manifest.template. Pero nose pq no funciona.

Alguien sabe si ha cambiado la forma de petición para esta versión?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar