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 Buscar Temas de Hoy Marcar Foros Como Leídos


Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-03-2019
cocute cocute is offline
Miembro
 
Registrado: nov 2008
Posts: 403
Poder: 16
cocute Va por buen camino
permisos en rio

tengo una aplicación android
que en tokio no me daba problemas,
le daba permisos de lectura y escritura porque leo/escribo un fichero de texto,
pero al compilar en RIO no me van los permisos, tengo que poner los permisos a mano en mi móvil de Memoria o algo así,
que es el único permiso que me deja activar,

sabéis qué es lo que han cambiado? y que permiso debería activar?

gracias
Responder Con Cita
  #2  
Antiguo 10-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
La política de permisos ha cambiado, apartir de oreo (creo) hay unos permisos "peligrosos".

Read/write externar storage está en la lista de peligrosos, y el usuario los ha de autorizar explícitamente.

Hay dos formas, a mano, tal como lo haces ahora, o comprobar los permisos en tiempo de ejecución.

Yo solo lo he implementado para llamadas telefónicas, tengo otra aplicación que sí usa external storage pero todavía no me he metido con ella. En las demos que te instala con río hay una aplicación, phonedialer, ahí miré como hacerlo. No sé si para rewad/write hay una, échale un vistazo.
Responder Con Cita
  #3  
Antiguo 11-03-2019
WHILENOTEOF WHILENOTEOF is offline
Miembro
 
Registrado: mar 2008
Posts: 229
Poder: 17
WHILENOTEOF Va camino a la fama
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.
Responder Con Cita
  #4  
Antiguo 11-03-2019
cocute cocute is offline
Miembro
 
Registrado: nov 2008
Posts: 403
Poder: 16
cocute Va por buen camino
yo creo que voy a volver a Tokio,
además en rio me va toda la interface muy lenta y no encuentro las cosas,
simplemente para meter una path de una librería con lo que se usa no lo han podido esconder más.
Responder Con Cita
  #5  
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
  #6  
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
  #7  
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
  #8  
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
  #9  
Antiguo 12-03-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is online now
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
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
  #10  
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 10:24:58. Razón: error
Responder Con Cita
  #11  
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
  #12  
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
  #13  
Antiguo 15-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 01:08:42.
Responder Con Cita
  #14  
Antiguo 15-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
Los administradores me van a crujir, pero juro que puese las etiquetas de código.
Responder Con Cita
  #15  
Antiguo 15-03-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is online now
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Responder Con Cita
  #16  
Antiguo 15-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
Pero es fácil.
pues yo no lo veo tan fácil,
he intentado meter todo eso en mi programa pero no me funcionaba me daba un montón de errores,
si hay que hacer todo eso cada vez que quieres meter un permiso un programa ya digo que sigo en Tokio
Responder Con Cita
  #17  
Antiguo 15-03-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is online now
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por cocute Ver Mensaje
pues yo no lo veo tan fácil,
he intentado meter todo eso en mi programa pero no me funcionaba me daba un montón de errores,
si hay que hacer todo eso cada vez que quieres meter un permiso un programa ya digo que sigo en Tokio
El problema no es tokio, rio, etc. sino que google cambió a partir de android 6.1 (sdk 26) la obligación de pedir permisos para ciertas cosas.
Y además, si quieres subir tu software a la "google play store" necesitas por obligación, también, sdk26 en adelante.
Responder Con Cita
  #18  
Antiguo 15-03-2019
cocute cocute is offline
Miembro
 
Registrado: nov 2008
Posts: 403
Poder: 16
cocute Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
El problema no es tokio, rio, etc. sino que google cambió a partir de android 6.1 (sdk 26) la obligación de pedir permisos para ciertas cosas.
Y además, si quieres subir tu software a la "google play store" necesitas por obligación, también, sdk26 en adelante.

Pero si yo compilo con Tokio con la API 28.0.3 e instalo la aplicación en mi móvil me pilla los permisos sin problemas sin tener que activarlos a mano y sin meter ningún código a mano.

Aunque no he probado a subir esa apk a la market Ya que hay apps que hago que me da igual que no estén en la market.

Esto con Rio no se puede
Responder Con Cita
  #19  
Antiguo 15-03-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is online now
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Qué versión es tu android?
Responder Con Cita
  #20  
Antiguo 16-03-2019
cocute cocute is offline
Miembro
 
Registrado: nov 2008
Posts: 403
Poder: 16
cocute Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
¿Qué versión es tu android?
Android 9.0 en el mate10

La primera vez que ejecuto la apk me sale un mensaje de algo como si estuviese hecho para un android anterior, pero ya no sale las siguientes veces ni da más problema.
(pero ya digo que compilo con Tokio con la api 28.0.3)

Última edición por cocute fecha: 16-03-2019 a las 13:25:33.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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


La franja horaria es GMT +2. Ahora son las 21:42:37.


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