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 11-03-2019
cocute cocute is offline
Miembro
 
Registrado: nov 2008
Posts: 403
Poder: 16
cocute Va por buen camino
Cita:
Empezado por WHILENOTEOF Ver Mensaje
En un reciente webminar se comentó la nueva política de permisos de Android y como implementarlo en Delphi, este es el enlace : http://delphi.org/2019/02/get-the-mo...with-10-3-rio/ , a partir del 20:30 está el tema de los permisos.
lo he visto pero no me queda claro que es lo que hay que hacer,
hay que meter código a mano sobre los permisos?
no se puede como antes simplemente marcar la casilla del permiso que quieres que se active?
aunque luego al que lo instala se le pregunte al instalar si lo acepta?

gracias
Responder Con Cita
  #2  
Antiguo 11-03-2019
cocute cocute is offline
Miembro
 
Registrado: nov 2008
Posts: 403
Poder: 16
cocute Va por buen camino
por cierto otra duda, no entiendo porque si compilo mi aplicacion con Tokio, aun usando el mismo SDK 28 que en rio,
al inicial la aplicación en un movil que tiene android9 la primera vez me aparece un mensaje como que la aplicación ha sido creada para una versión anterior de Android.
Responder Con Cita
  #3  
Antiguo 12-03-2019
Avatar de turbopascual5.0
turbopascual5.0 turbopascual5.0 is offline
Miembro
 
Registrado: feb 2011
Posts: 54
Poder: 14
turbopascual5.0 Va por buen camino
Cita:
Empezado por cocute Ver Mensaje
por cierto otra duda, no entiendo porque si compilo mi aplicacion con Tokio, aun usando el mismo SDK 28 que en rio,
al inicial la aplicación en un movil que tiene android9 la primera vez me aparece un mensaje como que la aplicación ha sido creada para una versión anterior de Android.
Tokio tiene un bug y en el manifest siempre pone que el sdk target es api 14.

Y olvida subir una aplicación hecha en Tokio al store, te dirá que la api mínima es (creo) 26 , ahora no estoy seguro si 23 , o 26, pero da igual, tu manifest dirá que la estás enviando a 14...
Responder Con Cita
  #4  
Antiguo 12-03-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por turbopascual5.0 Ver Mensaje
la api mínima es (creo) 26
Eso es así para todo el mundo, con todos los programas.
Responder Con Cita
  #5  
Antiguo 13-03-2019
cocute cocute is offline
Miembro
 
Registrado: nov 2008
Posts: 403
Poder: 16
cocute Va por buen camino
Cita:
Empezado por turbopascual5.0 Ver Mensaje
Tokio tiene un bug y en el manifest siempre pone que el sdk target es api 14.

Y olvida subir una aplicación hecha en Tokio al store, te dirá que la api mínima es (creo) 26 , ahora no estoy seguro si 23 , o 26, pero da igual, tu manifest dirá que la estás enviando a 14...
No me queda otra que seguir en Tokio de momento,
Ya que al intentar recompilar mi aplicación en RIO no soy capaz de que funcione bien del todo, aparte de los permisos me da más errores.
Bueno una vez ajustado error no da pero la aplicación no hace lo que debe de hacer,

Anteriormente cada vez que sacaban una versión nueva de Delphi al recompilar mis aplicaciones android notaba mejora arrancando más rápido,
con Rio ya eso no se ve ninguna mejora, y lo que he comentado antes al cambio de interface no me termino de hacer.

Sobre Tokio usas la última versión 10.2.3 build 3231?
esta es la última no?
https://cc.embarcadero.com/item/30842

Última edición por cocute fecha: 13-03-2019 a las 09:24:58. Razón: error
Responder Con Cita
  #6  
Antiguo 13-03-2019
Avatar de turbopascual5.0
turbopascual5.0 turbopascual5.0 is offline
Miembro
 
Registrado: feb 2011
Posts: 54
Poder: 14
turbopascual5.0 Va por buen camino
Cita:
Empezado por cocute Ver Mensaje
No me queda otra que seguir en Tokio de momento,
Ya que al intentar recompilar mi aplicación en RIO no soy capaz de que funcione bien del todo, aparte de los permisos me da más errores.
Bueno una vez ajustado error no da pero la aplicación no hace lo que debe de hacer,

Anteriormente cada vez que sacaban una versión nueva de Delphi al recompilar mis aplicaciones android notaba mejora arrancando más rápido,
con Rio ya eso no se ve ninguna mejora, y lo que he comentado antes al cambio de interface no me termino de hacer.
Si son aplicaciones que instalas en tu móvil por cable, y les pones los permisos a mano, no hay problema. Una vez que hayas dado los permisos no te los volverá a pedir aunque recompiles y vuelvas a pasarla al móvil. Lo del store sí lo tendrás mal. Había alguna info por la web sobre como salvar el tema del bug de la api en Tokio, pero la verdad, lo vi tan complicado que se me escapaba de mi nivel.

A mi rio me va fluido, I7, 16 GB ram.

Un saludo
Responder Con Cita
  #7  
Antiguo 13-03-2019
cocute cocute is offline
Miembro
 
Registrado: nov 2008
Posts: 403
Poder: 16
cocute Va por buen camino
Y no existe algún componente o alguna utilidad que se añada al IDE o algo así que facilite lo de añadir esto de los permisos en las aplicaciones android?
Responder Con Cita
  #8  
Antiguo 14-03-2019
Avatar de turbopascual5.0
turbopascual5.0 turbopascual5.0 is offline
Miembro
 
Registrado: feb 2011
Posts: 54
Poder: 14
turbopascual5.0 Va por buen camino
Cita:
Empezado por cocute Ver Mensaje
Y no existe algún componente o alguna utilidad que se añada al IDE o algo así que facilite lo de añadir esto de los permisos en las aplicaciones android?
No , no existe.
Pero es fácil.
En primer lugar activa secure file sharing , en entitlement list, aquí tienes como:
http://blong.com/Articles/AndroidPer...ureFileSharing
Esto añadirá en el manifest un apartado de provider.
Ahora el código delphi:

Código Delphi [-]
 private
    FPermissionReadExternalStorage,
    FPermissionWriteExternalStorage: string;
    procedure DisplayRationale(Sender: TObject; const APermissions: TArray<string>; const APostRationaleProc: TProc);
    procedure AccessExternalStoragePermissionRequestResult(Sender: TObject; const APermissions: TArray<string>; const AGrantResults: TArray);
    { Private declarations }
  public
    { Public declarations }
  end;

var
  HeaderFooterForm: THeaderFooterForm;

implementation
uses
{$IFDEF ANDROID}
{  Androidapi.Helpers,
  Androidapi.JNI.JavaTypes,
  Androidapi.JNI.Os,}
 {$ENDIF  ANDROID}
  FMX.DialogService;

{$R *.fmx}
{$R *.Windows.fmx MSWINDOWS}
{$R *.NmXhdpiPh.fmx ANDROID}
{$R *.LgXhdpiTb.fmx ANDROID}

procedure theaderfooterform.DisplayRationale(Sender: TObject; const APermissions: TArray<string>; const APostRationaleProc: TProc);
var
  I: Integer;
  RationaleMsg: string;
begin

  for I := 0 to High(APermissions) do
  begin
      if APermissions[i] = FPermissionReadExternalStorage then
      RationaleMsg := RationaleMsg + 'La aplicación necesita permiso para acceder al almacenamiento.';
  end;
   // Show an explanation to the user *asynchronously* - don't block this thread waiting for the user's response!
  // After the user sees the explanation, invoke the post-rationale routine to request the permissions
  TDialogService.ShowMessage(RationaleMsg,
    procedure(const AResult: TModalResult)
    begin
      APostRationaleProc;
    end)

end;

procedure theaderfooterform.AccessExternalStoragePermissionRequestResult(Sender: TObject; const APermissions: TArray<string>; const AGrantResults: TArray);
begin

  // 2 permissions involved: READ_EXTERNAL_STORAGE and WRITE_EXTERNAL_STORAGE
  if (Length(AGrantResults) = 2) and (AGrantResults[0] = TPermissionStatus.Granted) and (AGrantResults[1] = TPermissionStatus.Granted)  then
   begin
   //aquí iría el código si la autorización es correcta.

   end
  else
   begin
    //los permisos no estan autorizados, presentamos un mensaje. FALTA: Implementar panel con el mensaje y botón para raise.
    TDialogService.ShowMessage('La aplicación no puerde continuar porque no tiene los permisos necesarios.')
   end;

end;

Y en evento form create:

Código Delphi [-]
{$IFDEF ANDROID}
  FPermissionReadExternalStorage := JStringToString(TJManifest_permission.JavaClass.READ_EXTERNAL_STORAGE);
  FPermissionWriteExternalStorage := JStringToString(TJManifest_permission.JavaClass.WRITE_EXTERNAL_STORAGE);
  PermissionsService.RequestPermissions([FPermissionReadExternalStorage, FPermissionWriteExternalStorage],   AccessExternalStoragePermissionRequestResult, DisplayRationale);

 {$ENDIF}

La comprobación de permisos se hace en :

Código:
  PermissionsService.RequestPermissions([FPermissionReadExternalStorage,  FPermissionWriteExternalStorage],    AccessExternalStoragePermissionRequestResult, DisplayRationale);
No es necesario que esté en form create, la llamada la puedes hacer en cualquier punto del programa, yo la he puesto para que se inicie nada más arrancar el programa porque me gusta que los permisos se pidan al principio.

Fíjate en un detalle, en la parte de código:

Código Delphi [-]
   //aquí iría el código si la autorización es correcta.

   end
  else
   begin
    //los permisos no estan autorizados,
    TDialogService.ShowMessage('La aplicación no puerde continuar porque no tiene los permisos necesarios.')

El planteamiento es que donde hago el comentario // aquí iría el código si la autorización es correcta, pondrías el código que accede al almacenamiento externo.

Y donde pone TDialogService.ShowMessage('La aplicación no puerde continuar porque no tiene los permisos necesarios.')
pondías el mensaje tipo , "el permiso de acceso al almacenamiento no está autorizado" .

La aplicación puede seguir funcionando sin los permisos, porque los va a comprobar cada vez y si no los autorizas no ejecutará el código.

Como mi aplicación accede a unas bases de datos en la nube y sin esos datos no vale para nada...... los pido al inicio y si no los autorizas cierro la aplicación.

Espero te sea de ayuda, al principio es bastante abrumador, a mi me pasó, pero ya ves que es sencillo.

Para llamadas de teléfono y acceso a la cámara tienes ejemplos en las demos que se instalan con rio. El código que te he puesto para acceso a almacenamiento externo está sacado de la demo de acceso a cámara, que necesita tres permisos, read/write external storage y cámera.

Un saludo

Última edición por Casimiro Notevi fecha: 15-03-2019 a las 00:08:42.
Responder Con Cita
  #9  
Antiguo 12-03-2019
Avatar de turbopascual5.0
turbopascual5.0 turbopascual5.0 is offline
Miembro
 
Registrado: feb 2011
Posts: 54
Poder: 14
turbopascual5.0 Va por buen camino
Cita:
Empezado por cocute Ver Mensaje
lo he visto pero no me queda claro que es lo que hay que hacer,
hay que meter código a mano sobre los permisos?
no se puede como antes simplemente marcar la casilla del permiso que quieres que se active?
aunque luego al que lo instala se le pregunte al instalar si lo acepta?

gracias
Sí, hay que meterlo a mano. Si no lo metes no se preguntará nada, al llegar al código donde, por ejemplo, se ha de realizar una llamada telefónica, tendrás un mensaje diciendo que el permiso no está garantizado y que no puede realizar la acción.

Las casillas las has de seguir marcando.

Solo tienes dos opciones, o no pones el código y cuando instales la aplicación vas a aplicaciones, configuración, permisos y activas los permisos, o lo pones.

Ya he implementado los permisos en la apli que comentaba post anteriores, para acceder a permisor read, write, external storage. Ahora no lo tengo a mano, esta noche te puedo decir el código y donde hay que ponerlo.

Un saludo
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
Permisos NTFS johncook API de Windows 0 24-07-2006 17:05:33
Permisos de IBConsole Novata2006 Firebird e Interbase 0 12-05-2006 13:26:06
Permisos en Interbase federiconqn21 Conexión con bases de datos 1 06-02-2006 16:15:20
Control de Permisos con ADO Migpal MS SQL Server 4 08-11-2005 08:27:50
permisos de red nicocer API de Windows 2 18-06-2004 20:17:46


La franja horaria es GMT +2. Ahora son las 21:29:05.


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