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
  #21  
Antiguo 07-09-2018
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 540
Poder: 17
jhonalone Va por buen camino
Muchas gracias por tus explicaciones, Turbo... (por abreviar)

He seguido tus instrucciones y he creado una versión nueva del SDK (Api 28) Compilo con targetSdkVersion 28 y 26 y me da el mismo problema con los permisos en el SDK.

He bajado el archivo KatriFree de Dave Notave que dice Johnny y estoy buscando allí alguna solución que me valga. Ya que te estás interesando por ayudarme, te haré llegar el resultado si es positivo. A tí y a quien pueda interesar en el foro.

Un saludo cordial.
__________________
"Pedid y se os dará; buscad y hallaréis ..." (Lc 11,9-10)
"...si no tengo caridad, nada soy..." (1 Cor 13,1-13)
Responder Con Cita
  #22  
Antiguo 16-09-2018
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 540
Poder: 17
jhonalone Va por buen camino
Hola a todos y a Turbo...

No he abandonado (todavía) el asunto tengo algunas perspectivas esperanzadoras en DX Tokyo. Pronto tendréis noticias mías. Estoy usando KastriFree, como ya os comenté.

Saludos.
__________________
"Pedid y se os dará; buscad y hallaréis ..." (Lc 11,9-10)
"...si no tengo caridad, nada soy..." (1 Cor 13,1-13)
Responder Con Cita
  #23  
Antiguo 23-09-2018
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 540
Poder: 17
jhonalone Va por buen camino
Hola a todos.

Como dije he estado tratando de adaptar el código de KastriFree de Dave.

Creo que he conseguido una adaptación ("razonable") del control de los permisos de Android en la versión 10.2.3 de DX Tokyo. Esta versión la he bajado de prueba desde Embarcadero. Yo estoy usando la versión Seattle. Esperaré a que Embarcadero saque la versión 10.3 para actualizarme (Si viene actualizado a las nuevas exigencias de Google - Android)

Sé que turbopascual5.0 estaba interesado.

A ver soy capaz de contarlo sin que se me olvide nada y que se entienda bien.

Paso 1.- Te bajas y descomprimes el archivo KastriFree-master.zip desde AQUI.

Paso 2.- Para no andar cambiando directorios, he copiado en el directorio donde tengo los archivos de la aplicación, los siguientes archivos desde la carpeta C:\KastriFree\KastriFree-master\Core:

(La mayoría de estas no son necesarias para Android, pero ahí están por si quieres experimentar otros SO's)

DW.OSDevice.iOS.pas
DW.OSDevice.Linux.pas
DW.OSDevice.Mac.pas
DW.OSDevice.pas
DW.OSDevice.Win.pas
DW.OSLog.Linux.pas
DW.OSLog.Mac.pas
DW.OSLog.pas
DW.OSLog.Win.pas


(Estas creo que son necesarias casi todas o todas, no me he parado mucho a verlo)

DW.Androidapi.JNI.Log.pas
DW.GlobalDefines.inc
DW.OSDevice.Android.pas
DW.OSLog.Android.pas
DW.PermissionsRequester.Android.pas
DW.PermissionsRequester.Android_ORIGINAL.pas
DW.PermissionsRequester.Default.pas
DW.PermissionsRequester.pas
DW.PermissionsTypes.pas

(Desde C:\KastriFree\KastriFree-master\Demos\AndroidAPI26)

provider_paths.xml

(Desde C:\KastriFree\KastriFree-master\ThirdParty\Android )

support-compat-26.1.0.jar
support-core-utils-26.1.0.jar

Paso 3.- Añadir a la cláusula Uses del formulario principal.

DW.PermissionsRequester, DW.PermissionsTypes,

Paso 4.- En la clase principal del formulario principal añadimos


Código Delphi [-]
.........................................................................

  private
    FRequester: TPermissionsRequester;
    procedure PermissionsResultHandler(Sender: TObject; const ARequestCode: Integer; const AResults: TPermissionResults);

  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  end;

const   // Pueden añadirse las que se necesiten
  Read_SD = 'android.permission.READ_EXTERNAL_STORAGE';
  Write_SD = 'android.permission.WRITE_EXTERNAL_STORAGE';
  Calendario =  'android.permission.READ_CALENDAR';
  Internet = 'android.permission.INTERNET';
  BlueTooth = 'android.permission.BLUETOOTH';
  BlueAdmin ='android.permission.BLUETOOTH_ADMIN';

  Permis_Code = 1;

..........................................................................


Y en la cláusula implementation


Código Delphi [-]

.................................................

implementation

{$R *.fmx}

var
  Mostrar_Permisos : Boolean = True;

.............................. ................

constructor TIni.Create(AOwner: TComponent);
begin
  inherited;
  FRequester := TPermissionsRequester.Create;
  FRequester.RequestPermissions([Read_SD, Write_SD, Calendario, Internet, BlueTooth, BlueAdmin], Permis_Code);
  FRequester.OnPermissionsResult := PermissionsResultHandler;
end;

destructor TIni.Destroy;
begin
  FRequester.Free;
  inherited;
end;

procedure permitido;
begin
  Ini.ComprobarExport(nil);
end;

procedure rechazado;
begin
  ShowMessage('Debe conceder todos los permisos antes usar esta aplicación.'+#13+
                'El programa se CERRARÁ ahora. Si concedió los permisos, funcionará correctamente al ejecutarlo de nuevo.');
end;

procedure TIni.PermissionsResultHandler(Sender: TObject; const ARequestCode: Integer; const AResults: TPermissionResults);
begin
  case ARequestCode of
    Permis_Code:
    begin
      if AResults.AreAllGranted
      then  permitido
      else  rechazado;
    end;
  end; // case
end;

procedure TIni.FormShow(Sender: TObject);
begin
    if Mostrar_Permisos
    then begin
           FRequester.RequestPermissions([Read_SD, Write_SD, Calendario, Internet, BlueTooth, BlueAdmin], Permis_Code);
           Mostrar_Permisos := False;
         end;
end;


Seguimos las recomendaciones de Dave

Passo 5.- En la columna de la derecha del IDE que pone Project Manager inabilitamos la libreria de Anddroid llamada android-support-v4.dex.jar
y añadimos las librerías que hemos copiado en el punto 2 llamadas
support-compat-26.1.0.jar
support-core-utils-26.1.0.jar


Paso 6.- Añadimos a la lista de Deploy
del Proyecto el archivo provider_paths.xml que hemos copiado en el paso 2

Paso 7.- RECUERDA QUE PARA GENERAR EL ARCHIVO AndroidManifest.template.xml TIENES QUE HABER COMPILADO AL MENOS UNA VEZ TU PROGRAMA

Paso 8.- Cambiamos en el el AndroidManifest.template.xml, sólo android:targetSdkVersion="26"

Paso 9.- Añadimos en el manifiesto el provider siguiente en el sitio que está.

Código:
        <provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="com.Embarcadero.nombre-de-tu-programa.fileprovider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/provider_paths"/>
        </provider>

Código Delphi [-]
................................................................................
    
    <uses-sdk android:minSdkVersion="%minSdkVersion%" android:targetSdkVersion="26" />
<%uses-permission%>
    <uses-feature android:glEsVersion="0x00020000" android:required="True"/>
    ersistent="%persistent%" 
        android:restoreAnyVersion="%restoreAnyVersion%" 
        android:label="%label%" 
        android:debuggable="%debuggable%" 
        android:largeHeap="%largeHeap%"
        android:icon="%icon%"
        android:theme="%theme%"
        android:hardwareAccelerated="%hardwareAccelerated%">
       AQUI VA EL PROVIDER QUE COPIAMOS MAS ARRIBA (no olvides PONER EL NOMBRE DE TU PROGRAMA)
<%application-meta-data%>
    <%services%>
....................................................................................


Paso 10.- Como la barra de estado se descompone, debes seguir las instrucciones de Dave (Te las copio)

"Taking care of the status bar
In the previous article, it had slipped past me that when changing the API target, the status bar was no longer visible!

In this demo, the workaround was to change the Fill property of the form, setting the Color to Null, and the Kind to Solid. In addition, a Rectangle is added to the form, the Align property set to Contents, and the Color property of Fill set to Whitesmoke. Now the status bar is visible again, however remember that this is just a workaround; hopefully an official solution will present itself in the next update".

Creo que no se me olvida nada.

Un saludo.
__________________
"Pedid y se os dará; buscad y hallaréis ..." (Lc 11,9-10)
"...si no tengo caridad, nada soy..." (1 Cor 13,1-13)
Responder Con Cita
  #24  
Antiguo 30-10-2018
DamianG DamianG is offline
Miembro
 
Registrado: mar 2008
Posts: 95
Poder: 16
DamianG Va por buen camino
Api 19 minSdkVersion y Api 26 targetSdkVersion

Hola, con la version 10.3 Beta pude compilar la aplicación con los nuevos requerimientos, lo único que me genera como mínima version de API la 19, perdiendo así la posibilidad de que funcione en varios dispositivos.
¿Alguien sabe con cambiar esa version mínima?
Traté modificando manualmente AndroidManifest.template.xml pero al subirla a la google play me da un error de que el apk no es firmado de forma válida.. si dejo por defecto la versión 19, si funciona.
Saludos y gracias.

Última edición por DamianG fecha: 30-10-2018 a las 22:23:09.
Responder Con Cita
  #25  
Antiguo 31-10-2018
Avatar de noshy
noshy noshy is offline
Miembro
 
Registrado: jul 2003
Posts: 139
Poder: 21
noshy Va por buen camino
Hola delphiteros, como están?, he probado la solución de jhonalone, pero me genera error en el provider:


Código:
        <provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="com.Embarcadero.nombre-de-tu-programa.fileprovider"
            android:exported="false"
            android:grantUriPermissions="true">
 ERROR AQUI -> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/provider_paths"/>  
        </provider>

El error es el siguiente:

Código Delphi [-]
[PAClient Error] Error: E2312 Z:\03-App Transmitaxi Movil\Android\Release\TransmitaxiMovil\AndroidManifest.xml:42: error: Error: No resource found that matches the given name (at 'resource' with value '@xml/provider_paths').

el archivo provider_paths.xml esta en el deployment, lo único es que puse como carpeta destino .\assets\internal\ ya que no especifica donde apuntarlo.

A alguien le funcionó??

Saludos
__________________
\_--> NoShY <--_/
Responder Con Cita
  #26  
Antiguo 31-10-2018
Avatar de noshy
noshy noshy is offline
Miembro
 
Registrado: jul 2003
Posts: 139
Poder: 21
noshy Va por buen camino
SOLUCION al error anterior:

En el deployment, "remote path" debe ir a "res\xml\".

Pero, aunque no me da mas ese error, la compilación se realiza perfecto, instala perfecto, pero al iniciarla me indica "La aplicación ha dejado de funcionar".

Siendo que con el targetSDKVersion = "14" funciona todo perfecto.

Estas actualizaciones de San Goole me están volviendo crazy
__________________
\_--> NoShY <--_/
Responder Con Cita
  #27  
Antiguo 01-11-2018
Avatar de noshy
noshy noshy is offline
Miembro
 
Registrado: jul 2003
Posts: 139
Poder: 21
noshy Va por buen camino
San Google*
__________________
\_--> NoShY <--_/
Responder Con Cita
  #28  
Antiguo 18-04-2019
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 540
Poder: 17
jhonalone Va por buen camino
Hola a todos.

Hago algunas precisiones por si interesan a alguien. Teniendo en cuenta que debe haber mucha gente que todavía usa la versión Tokyo.

1.- A mí me funciona perfectamente en Delphi 10.2.3

2.- Tiene razón noshy: en el deployment, "remote path" debe ir a "res\xml\". Se me olvidó puntualizarlo.

3.- Es innecesario decir que TODOS los permisos habilitados en "Uses Permissions" son los que hay que autorizar y adaptar a tus necesidades. (Ver el paso 4 del tutorial)

4.- Los procedures "Permitido" y "Rechazado" debes adaptarlos a tus necesidades. Pero según mi experiencia, "AResults.AreAllGranted" casi siempre devuelve false (aunque se autoricen los permisos), de ahí el mensaje y la necesidad de abortar el programa en este punto. Cuando se vuelve a reiniciar el programa funciona correcto si se autorizaron los permisos.

5.- También he comprobado que la versión mínima debe ser la 19 (KitKat) Por tanto habrá que modificarla en el "AndroidManifest.template.xml"

6.- En el evento OnShow no debemos poner más que lo que se indica en paso 4:
Código Delphi [-]
procedure TIni.FormShow(Sender: TObject);
begin
    if Mostrar_Permisos
    then begin
           FRequester.RequestPermissions([Read_SD, Write_SD, Calendario, Internet, BlueTooth, BlueAdmin], Permis_Code);
           Mostrar_Permisos := False;
         end;

7.- Las rutinas propias de arranque de tu programa las debes poner en el procedure "Permitido" de este modo:
Código Delphi [-]
procedure Permitido;
begin
  Ini.MiRutinaDeArranque(nil);
end;

8.- Compilo los programas con NDK64bits\android-ndk-r16b y con \build-tools\28.0.2\aapt.exe y con android/jdk1.8.0_144\bin

9.- Aunque parezca complicado, si sigues los pasos del tutorial, no lo es tanto.

Si se me ocurre algo más ya lo publico.

Saludos a todos.
__________________
"Pedid y se os dará; buscad y hallaréis ..." (Lc 11,9-10)
"...si no tengo caridad, nada soy..." (1 Cor 13,1-13)

Última edición por jhonalone fecha: 18-04-2019 a las 18:53:09.
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
Problemas al pasar de QuickReport a FastReport fito42 Impresión 0 05-11-2014 16:28:34
problemas en consulta al pasar parametros leofuentes21 SQL 3 28-12-2012 19:03:36
Problemas al pasar maestro-detalle de D4 a D6 JMOTON Conexión con bases de datos 2 23-11-2005 13:35:06
problemas al pasar un parametro a una consulta sql tiagor64 Conexión con bases de datos 2 24-01-2005 19:37:19
problemas para pasar los datos de un Tmemo a otro, ya probe de todo :/ nahuel007 Varios 6 08-01-2005 21:05:02


La franja horaria es GMT +2. Ahora son las 07:13:09.


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