Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Desarrollo en Delphi para Android
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy


Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-02-2021
viverosjosem viverosjosem is offline
Baneado
 
Registrado: dic 2017
Posts: 64
Poder: 0
viverosjosem Va por buen camino
Hola Casimiro y Voci.
Aqui va una procion de codigo que e probado en Delphi Tpkyo, y Delphi Rio. En Delphi Tokyo finciona. En Delphi Rio, se cuelga. Los permisos los active manualmente desde telefono Android.

Código Delphi [-]
...
...
var
  // Permissions
  vReader_Access: string;
  vWrite_Access: string;
...
...

procedure TFConfigIP.FormCreate(Sender: TObject);
begin
   vReader_Access := JStringToString(TJManifest_permission.JavaClass.READ_EXTERNAL_STORAGE);
   vWrite_Access    := JStringToString(TJManifest_permission.JavaClass.WRITE_EXTERNAL_STORAGE);
end;



procedure TFConfigIP.FormShow(Sender: TObject);
begin
  if TOSVersion.Check(6) then
  begin
    PermissionsService.RequestPermissions([vReader_Access, vWrite_Access], LocationPermissionRequestResult);
  end
end;


procedure TFConfigIP.LocationPermissionRequestResult(Sender: TObject;
  const APermissions: TArray<string>;
  const AGrantResults: TArray);
var
  LocationPermissionGranted: Boolean;
  sFile   : String;

begin
   sFile := SDCARD + 'Server.csv';    //-->    SDCARD  = '/sdcard/download/';

   LocationPermissionGranted := (Length(AGrantResults) = 2) and
     (AGrantResults[0] = TPermissionStatus.Granted) and
     (AGrantResults[1] = TPermissionStatus.Granted);

   //======>> Aqui ya no entra. En Tokyo, todo bien. Pero en Delphi Rio, se cuelga, y no presenta ningun tipo de mensaje.
    
   if LocationPermissionGranted then begin
      if (FileExists(sFile)) then begin
         ShowMessage( 'Permiso concedido.');
         CargaServer(sFile);
      end
      else begin
         ShowMessage( sFile + ', no encontrado. lo crearemos.');
         FTP_Server;
      end;
   end
   else
      ShowMessage( 'Permiso denegado.');
end;


procedure TFConfigIP.CargaServer(sFile: String);
var
   f : System.TextFile;
   j : String;

begin
   AssignFile(f, sFile );
   Reset(f);

   while not SeekEof(f) do
   begin
      if SeekEoln(f) then
        Readln;

      Read( f, j );
      j := Trim( j );

      EdServer.Text  := GetParam(j, ';');    // GetParam, es una funcion que descompone un String. En este caso, separado por ";"
      EdCodigo.Text  := GetParam(j, ';');
      EdPasword.Text := GetParam(j, ';');
   end;

   CloseFile( f );
end;

Espero que este ejemplo sirva de algo, y, me puedan dar luces de que esta pasando.

Gracias.

Saludos.
Jose Miguel.
Responder Con Cita
  #2  
Antiguo 25-02-2021
voci voci is offline
Miembro
 
Registrado: oct 2003
Posts: 97
Poder: 21
voci Va por buen camino
No veo nada fuera de lo normal, si quieres darle otro enfoque pueba esto:

Código Delphi [-]
procedure TFConfigIP.FormShow(Sender: TObject);
begin
  if (PermissionsService.IsPermissionGranted(JStringToString(TJManifest_permission.JavaClass.READ_EXTERNA  L_STORAGE))= false) or (PermissionsService.IsPermissionGranted(JStringToString(TJManifest_permission.JavaClass.WRITE_EXTERN  AL_STORAGE))= false) then
    PermisoEscrituraLectura
  else
    Servidor;
end;

procedure TFConfigIP.PermisoEscrituraLectura;
begin
  PermissionsService.RequestPermissions([JStringToString(TJManifest_permission.JavaClass.READ_EXTERNAL_STORAGE), JStringToString(TJManifest_permission.JavaClass.WRITE_EXTERNAL_STORAGE)],
  procedure(const APermissions: TArray<string>; const AGrantResults: TArray)
  begin
    if (Length(AGrantResults) = 2) and (AGrantResults[0] = TPermissionStatus.Granted) and (AGrantResults[1] = TPermissionStatus.Granted) then
      begin
        ShowMessage( 'Permiso concedido.');
        Servidor;
      end
    else
      ShowMessage( 'Permiso denegado.');
  end)
end;

procedure TFConfigIP.Servidor;
var
   sFile: String;
begin
  sFile:= SDCARD + 'Server.csv';    //-->    SDCARD  = '/sdcard/download/';
  if (FileExists(sFile)) then
    CargaServer(sFile)
  else
    begin
      ShowMessage( sFile + ', no encontrado. lo crearemos.');
      FTP_Server;
    end;
end;

Saludos.

Última edición por voci fecha: 25-02-2021 a las 17:32:07.
Responder Con Cita
  #3  
Antiguo 26-02-2021
viverosjosem viverosjosem is offline
Baneado
 
Registrado: dic 2017
Posts: 64
Poder: 0
viverosjosem Va por buen camino
Hola Voci.
Intente compilar tu codigo. Pero da error. No reconoce el tipo TArray

Código Delphi [-]
procedure TFConfigIP.PermisoEscrituraLectura;
begin
  PermissionsService.RequestPermissions([JStringToString(TJManifest_permission.JavaClass.READ_EXTERNAL_STORAGE), JStringToString(TJManifest_permission.JavaClass.WRITE_EXTERNAL_STORAGE)],
  procedure(const APermissions: TArray<string>; const AGrantResults: TArray)   //<-- Aqui da error de compilacion
  begin
    if (Length(AGrantResults) = 2) and (AGrantResults[0] = TPermissionStatus.Granted) and (AGrantResults[1] = TPermissionStatus.Granted) then
      begin
        ShowMessage( 'Permiso concedido.');
        Servidor;
      end
    else
      ShowMessage( 'Permiso denegado.');
  end)
end;

Agradecido.

Saludos.
Jose Miguel.
Responder Con Cita
  #4  
Antiguo 26-02-2021
voci voci is offline
Miembro
 
Registrado: oct 2003
Posts: 97
Poder: 21
voci Va por buen camino
¿has incluido la librería "System.Permissions"?, ¿Que error te indica?.

Saludos.
Responder Con Cita
  #5  
Antiguo 26-02-2021
viverosjosem viverosjosem is offline
Baneado
 
Registrado: dic 2017
Posts: 64
Poder: 0
viverosjosem Va por buen camino
HOla voci.
Si, esta incluida la libreria System.Permissions.

El error que arroja es el siguiente:

[DCC Error] UConfigIP.pas(539): E2003 Undeclared identifier: 'TArray'

Código Delphi [-]
 PermissionsService.RequestPermissions([JStringToString(TJManifest_permission.JavaClass.READ_EXTERNAL_STORAGE), JStringToString(TJManifest_permission.JavaClass.WRITE_EXTERNAL_STORAGE)],
  procedure(const APermissions: TArray<string>; const AGrantResults: TArray)   //<-- Aqui da error de compilacion
Responder Con Cita
  #6  
Antiguo 27-02-2021
voci voci is offline
Miembro
 
Registrado: oct 2003
Posts: 97
Poder: 21
voci Va por buen camino
Compilado con delphi 10.3.3 y probado en mi móvil con android 7.

Código Delphi [-]
unit Unit1;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, System.Permissions,
  Androidapi.Helpers, Androidapi.JNI.Os, Androidapi.JNI.JavaTypes;
type
  TFConfigIP = class(TForm)
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
    procedure PermisoEscrituraLectura;
    procedure Servidor;
  public
    { Public declarations }
  end;

var
  FConfigIP: TFConfigIP;

implementation

{$R *.fmx}

procedure TFConfigIP.FormShow(Sender: TObject);
begin
  if (PermissionsService.IsPermissionGranted(JStringToString(TJManifest_permission.JavaClass.READ_EXTERNA  L_STORAGE))= false) or (PermissionsService.IsPermissionGranted(JStringToString(TJManifest_permission.JavaClass.WRITE_EXTERN  AL_STORAGE))= false) then
    PermisoEscrituraLectura
  else
    Servidor;
end;


procedure TFConfigIP.PermisoEscrituraLectura;
begin
  PermissionsService.RequestPermissions([JStringToString(TJManifest_permission.JavaClass.READ_EXTERNAL_STORAGE), JStringToString(TJManifest_permission.JavaClass.WRITE_EXTERNAL_STORAGE)],
  procedure(const APermissions: TArray<string>; const AGrantResults: TArray)
  begin
    if (Length(AGrantResults) = 2) and (AGrantResults[0] = TPermissionStatus.Granted) and (AGrantResults[1] = TPermissionStatus.Granted) then
      begin
        ShowMessage( 'Permiso concedido.');
        Servidor;
      end
    else
      ShowMessage( 'Permiso denegado.');
  end)
end;

procedure TFConfigIP.Servidor;
begin

end;

end.

Saludos.
Responder Con Cita
  #7  
Antiguo 27-02-2021
viverosjosem viverosjosem is offline
Baneado
 
Registrado: dic 2017
Posts: 64
Poder: 0
viverosjosem Va por buen camino
Hola Voci.

Cita:
Compilado con delphi 10.3.3 y probado en mi móvil con android 7.
El punto es que funciona bien con android 7, y android 8. El problema es que en Android 10 no funciona.

La misma aplicacion, sin cambiarle nada. Al instalarla en un dispositivo con Android 10, se cuelga al iniciar. No funciona. Inclusive tengo que reiniciar el dispositivo con Android 10, para poder cerrar la aplicacion.

Allguma idea?

Saudos.
Jose Miguel.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
VCL en iOS and Android el-mono Noticias 1 21-12-2020 09:28:09
Reportes Android RebeccaGL Desarrollo en Delphi para Android 1 29-06-2020 09:17:08
SDK 28 no funciona con android 9 Fossy Desarrollo en Delphi para Android 4 16-04-2019 14:38:40
sobre Android SDK Manager y diferentes versiones de Android cocute Desarrollo en Delphi para Android 2 29-11-2017 21:24:00
Solicitar permisos en Android 6 ElGatitoTapatio FireMonkey 2 19-01-2017 19:06:12


La franja horaria es GMT +2. Ahora son las 17:16:54.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi