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 05-09-2018
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 547
Poder: 17
jhonalone Va por buen camino
Muchísimas gracias por tu esfuerzo turbopascual5.0

Por cierto, ya hace unos añitos del 5.0 y del 5.1 que creo recordar que era la versión en castellano.

Sin embargo, hay algunas cosas que no me quedan claras. (No quisiera armar un un "estropicio" y tener que desinstalar e instalar de nuevo todo el sistema y volver a personalizar el IDE)

A ver si he entendido.

1.- Borro en Delphi la versión 25.2.5 32bit en el Sdk Versions para Android NO el de windows.

2.- Con el SDKManager borro todas las versiones menos la más moderna (23 en tu caso 26 ó 28 en el mío)

3.- Tengo Android Studio instalado, pero no he entendido para qué se usa.

4.- Voy a Delphi y con el botón Add genero una nueva versión.

5.- Pongo las rutas SDK y NDK (¿iguales que las de Android Studio? ¿cómo las localizo?)

6.- Delphi rellena todas las rutas.

7.- Modifico el AndroidManifest.template.xml, sólo android:targetSdkVersion="XX" (Donde XX es la versión que he dejado en el SDKManager)

8.- Al compilar la App, Delphi modifica el %minSdkVersion% por 14 en el AndroidManifest.template.xml.

9.- Ahora subimos la App a Play Store y Google te lo permite.

10.- Al instalarla, tengo que autorizar los permisos "peligrosos", que son los mismos que los tuyos, (uso de la SD) en Google Play Developers.



HE ENTENDIDO que esto mismo no te funcionó con la API 26.

Lo que me extraña es que te dejara subir la App con API 23, pues a mí me dice que tiene que ser mínimo 26.

Lo de la "chapucilla" no me ha quedado muy claro. Necesitaría una pequeña aclaración. Gracias.

Por favor rectifícame lo que corresponda.

Muchas gracias de nuevo por el gran esfuerzo que has hecho para explicarme el proceso.

Cuando me des el visto bueno me pondré manos a la obra.

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)

Última edición por jhonalone fecha: 05-09-2018 a las 13:24:15.
Responder Con Cita
  #2  
Antiguo 05-09-2018
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 547
Poder: 17
jhonalone Va por buen camino
Hola de nuevo turbopascual5.0

En el punto 10 tampoco sé cómo autorizar los permisos "peligrosos". Te agradecería me pusieras al corriente. Sé que te pido demasiado, pero no me defiendo muy bien con Google Play Developer.

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
  #3  
Antiguo 06-09-2018
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 jhonalone Ver Mensaje
Hola de nuevo turbopascual5.0

En el punto 10 tampoco sé cómo autorizar los permisos "peligrosos". Te agradecería me pusieras al corriente. Sé que te pido demasiado, pero no me defiendo muy bien con Google Play Developer.

Un saludo.

Se me pasó cosntestarte.


Como te he comentado, en los terminales.


En el play no autorizas nada, es que no existe ni la opción.


saludos
Responder Con Cita
  #4  
Antiguo 07-09-2018
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 547
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
  #5  
Antiguo 16-09-2018
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 547
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
  #6  
Antiguo 23-09-2018
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 547
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
  #7  
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
  #8  
Antiguo 30-10-2018
DamianG DamianG is offline
Miembro
 
Registrado: mar 2008
Posts: 95
Poder: 17
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 21:23:09.
Responder Con Cita
  #9  
Antiguo 06-09-2018
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 jhonalone Ver Mensaje
Muchísimas gracias por tu esfuerzo turbopascual5.0

Por cierto, ya hace unos añitos del 5.0 y del 5.1 que creo recordar que era la versión en castellano.

Sin embargo, hay algunas cosas que no me quedan claras. (No quisiera armar un un "estropicio" y tener que desinstalar e instalar de nuevo todo el sistema y volver a personalizar el IDE)

A ver si he entendido.

1.- Borro en Delphi la versión 25.2.5 32bit en el Sdk Versions para Android NO el de windows.

2.- Con el SDKManager borro todas las versiones menos la más moderna (23 en tu caso 26 ó 28 en el mío)

3.- Tengo Android Studio instalado, pero no he entendido para qué se usa.

4.- Voy a Delphi y con el botón Add genero una nueva versión.

5.- Pongo las rutas SDK y NDK (¿iguales que las de Android Studio? ¿cómo las localizo?)

6.- Delphi rellena todas las rutas.

7.- Modifico el AndroidManifest.template.xml, sólo android:targetSdkVersion="XX" (Donde XX es la versión que he dejado en el SDKManager)

8.- Al compilar la App, Delphi modifica el %minSdkVersion% por 14 en el AndroidManifest.template.xml.

9.- Ahora subimos la App a Play Store y Google te lo permite.

10.- Al instalarla, tengo que autorizar los permisos "peligrosos", que son los mismos que los tuyos, (uso de la SD) en Google Play Developers.



HE ENTENDIDO que esto mismo no te funcionó con la API 26.

Lo que me extraña es que te dejara subir la App con API 23, pues a mí me dice que tiene que ser mínimo 26.

Lo de la "chapucilla" no me ha quedado muy claro. Necesitaría una pequeña aclaración. Gracias.

Por favor rectifícame lo que corresponda.

Muchas gracias de nuevo por el gran esfuerzo que has hecho para explicarme el proceso.

Cuando me des el visto bueno me pondré manos a la obra.

Un saludo cordial.



je, je, sí hace unos años de la 5.0, ... que tiempos aquellos, cuando era joven, cuando los dinosaurios poblaban la tierra........


Vamos por faena:


1.- Borro en Delphi la versión 25.2.5 32bit en el Sdk Versions para Android NO el de windows.


Sí , lo borras en delphi, tools, options, sdk manager.


Para no hacer estropicios : abajo veras un botón export, te grabas un fichero (es un fichero texto) con la información de las rutas. Si la cosa se pone fea, usas import y andando.



2.- Con el SDKManager borro todas las versiones menos la más moderna (23 en tu caso 26 ó 28 en el mío)


Correcto. Solo dejas la que vas a usar.



3.- Tengo Android Studio instalado, pero no he entendido para qué se usa.


Para compilar una aplicación android se nesitan unas librerías, el SDK y el NDK. No son más que dos carpetas, con subcarpetas y ficheros. Y un gestor para actualizar los paquetes, el sdk manager. Estos paquetes los proporciona Google.

En la instalación de Delphi se instalan el SDK y el NDK, y te crea dos accesos, uno al sdk manager y otro al avd manager (para el emulador).
En la instalación de delphi ya te dice que si tienes el sdk y ndk que no hace falta que los instales.
Las versiones de NDK las puedes encontrar en https://developer.android.com/ndk/downloads/ es un simple zip, que contiene las carpetas.
Antes para instalar el SDK te podias bajar un ejecutable, y te creaba las carpetas y el acceso a sdk manager.
Ahora el ejecutable no está disponible, puedes bajar el SDK e instalarlo a mano (lo miré pero lo ví lioso), o más fácil, instalar android studio, y él se encarga de instalarte el SDK. Como te he dicho antes el SDK no deja de ser unas carpetas, por lo que si embarcadero las instala en:
C:\Users\Public\Documents\Embarcadero\Studio\19.0\PlatformSDKs\android-sdk-windows
al instalar android manager le puedes decir donde las quieres. Yo le dije que en disco D. Es decir puedes tener el sdk y ndk en varios sitios.

¿que es android studio? Pues el IDE oficial de google para programar aplicaciones android (creo que en java, no estoy seguro).
El caso es que el sdk manager que instala delphi parece un poco viejuno, android sdk tools tiene la version 25.2.5 y a mi nunca me dice que haya otra , y en sdk manager de studio descarga la 26.1.1.


4.- Voy a Delphi y con el botón Add genero una nueva versión.

Correcto.


5.- Pongo las rutas SDK y NDK (¿iguales que las de Android Studio? ¿cómo las localizo?)

C:\Users\Public\Documents\Embarcadero\Studio\19.0\PlatformSDKs\
Y dentro de esa carpeta veras la carpeta SDK y la NDK, solo has de decirle que son esas carpetas.

En teoría, porque al fin y al cabo solo es decirle donde estan las carpetas, tambien puedes apuntar a la carpeta de un ndk bajado del enlace que te he dado y apuntar el sdk a la carpeta donde te la instala android studio.
Pues si le dices que el ndk está en la carpeta donde descomprimiste el archivo bajado de la web no reconoce que ahí haya un NDK, parece que sea un bug.

En general, solo es decirle donde estan las carpetas, pero yo apuntando a otras que no sean las que hay en C:\Users\Public\Documents\Embarcadero\Studio\19.0\PlatformSDKs\ solo he tenido problemas



6.- Delphi rellena todas las rutas.

Sí, rellena todos los datos y te dirá que la api es la 26.

7.- Modifico el AndroidManifest.template.xml, sólo android:targetSdkVersion="XX" (Donde XX es la versión que he dejado en el SDKManager)

Sí, porque hay un bug y si dejas "%targetSdkVersion%" siempre pone "14", así que hay forzarlo.



8.- Al compilar la App, Delphi modifica el %minSdkVersion% por 14 en el AndroidManifest.template.xml.


Sí , correcto, lo puedes comprobar mirando el manifest que crea. Lo cierto es que tambien podrías forzarlo poniendo "14", pero el resultado es el mismo.


9.- Ahora subimos la App a Play Store y Google te lo permite.

sí, correcto



10.- Al instalarla, tengo que autorizar los permisos "peligrosos", que son los mismos que los tuyos, (uso de la SD) en Google Play Developers.

Depende de la versión de android que corra en el móbil, en un S4 no lo he de autorizar expresamente, en un S6 sí.

Este es un tema que he de mirarme en detalle, porque las aplicaciones te piden que autorices esos permisos , y he visto otras que te dicen que lo has de hacer. Parece ser que se puede consultar el estado y en consecuencia indicarle al usuario que lo haga.


Con la api 26 la aplicación se para, he mirado que algunos desarrrolladores han tenido problemas con sqllite, y mi aplicación hace uso....


Lo de que me permita subir con la 23:

A partir de agosto 2018........ las aplicaciones nuevas api 26 , las que ya estuviesen en el play estaran obligadas a estar actualizadas en noviembre.


Yo la tenía funcionando tan estupendamente en api14, pero como estaba cansado de ver el aviso al poner una actualización tuve la luminosa idea de actualizarlo con api 26 sin ver por la web los posibles problemas, no funcionó, así que la bajé de nuevo a api 14 y sorpresa!! el sr google me dice que nanai, que si la he subido a 26 ahora estoy obligado a mínimo api 23.



Y así estoy, en un S4 corre bien, en win corre bien, en un S6 me da un error de división por cero que estoy intentando encontrar donde se produce. Los S4 y S6 no tienen SD, grabo algunos pdf en \assets\internal, y tengo errores en las rutas de recuperación de los ficheros que antes no tenía. Un append en una base de datos azure (uso unidac) se hace sin problema en win y en android un campo simpre me lo toma como null (es un campo key no admite null) y la aplicación da error, aunque explicitamente le ponga por código que es un valor integer. Un calvario....... por zarpas.


Lamento tener que decirtelo, que tengas suerte que la vas a necesitar.


Un saludo , cualquier cosa no dudes en plantearla.
Responder Con Cita
  #10  
Antiguo 06-09-2018
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 547
Poder: 17
jhonalone Va por buen camino
Hola, turbopascual5.0.

Voy a ponerme manos a la obra.

Si tardo en responder es que estoy haciendo pruebas.

Me dices que no tienes SD en tus terminales.

MI App está orientada justo a tarjetas de memoria (aunque también puede funcionar sin ellas)

En realidad tengo dos problemas:
1.- La subida a Play Store.
2.- Los permisos para el uso de la SD

Si instalo en mis terminales laTableta 4.4, Telef 4.1.2 y telef 7.1.1 (los números son las versiones Android). Digo, si instalo desde el IDE con android:targetSdkVersion por defecto funciona en todos.

Si cambio la versión en el Manifest funciona en los antiguos pero en el nuevo (7.1.1) me da error de escritura en la SD. Parece ser que las nuevas versiones de Android son más restrictivas con los permisos y por ahí van los tiros en Play Store.

Utilizo un control para saberlo y está confirmado.
Tengo a True en el Uses Permision del Project/Options.

Código Delphi [-]

function CheckPermission(const APermissionName: string): Boolean;
var
  PackageName: JString;
begin
  Result := False;
  PackageName := TAndroidHelper.Context.getPackageName;

  Result := TAndroidHelper.Context.getPackageManager.checkPermission(StringToJString(APermissionName), PackageName) = TJPackageManager.JavaClass.PERMISSION_GRANTED;
end;

function CanWriteExterStorage: Boolean;
begin
  Result := False;
  Result := CheckPermission(C_android_permission_EXTERNAL_STORAGE);
end;

function TForm1.CheckCanWriteExterStorage: Boolean;
begin
{$IFDEF ANDROID}
  Result := False;
  if not CanWriteExterStorage then
  begin
    if not (CheckPermission(C_android_permission_EXTERNAL_STORAGE)) then
    begin
      ShowMessage(' "WRITE_EXTERNAL_STORAGE" no es "True"');
      Sleep(5000);
      exit;
    end;
  end;
{$ENDIF}
  Result := True;
end;

Está confirmado. Sigo peleando. Ya contaré.

Bueno, no me quedó claro dónde cambias los permisos, en el terminal o al subir a Play Store.

Saludos cordiales.
__________________
"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
  #11  
Antiguo 06-09-2018
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 jhonalone Ver Mensaje
Hola, turbopascual5.0.

Voy a ponerme manos a la obra.

Si tardo en responder es que estoy haciendo pruebas.

Me dices que no tienes SD en tus terminales.

MI App está orientada justo a tarjetas de memoria (aunque también puede funcionar sin ellas)

En realidad tengo dos problemas:
1.- La subida a Play Store.
2.- Los permisos para el uso de la SD

Si instalo en mis terminales laTableta 4.4, Telef 4.1.2 y telef 7.1.1 (los números son las versiones Android). Digo, si instalo desde el IDE con android:targetSdkVersion por defecto funciona en todos.

Si cambio la versión en el Manifest funciona en los antiguos pero en el nuevo (7.1.1) me da error de escritura en la SD. Parece ser que las nuevas versiones de Android son más restrictivas con los permisos y por ahí van los tiros en Play Store.

Utilizo un control para saberlo y está confirmado.
Tengo a True en el Uses Permision del Project/Options.

Código Delphi [-] function CheckPermission(const APermissionName: string): Boolean; var PackageName: JString; begin Result := False; PackageName := TAndroidHelper.Context.getPackageName; Result := TAndroidHelper.Context.getPackageManager.checkPermission(StringToJString(APermissionName), PackageName) = TJPackageManager.JavaClass.PERMISSION_GRANTED; end; function CanWriteExterStorage: Boolean; begin Result := False; Result := CheckPermission(C_android_permission_EXTERNAL_STORAGE); end; function TForm1.CheckCanWriteExterStorage: Boolean; begin {$IFDEF ANDROID} Result := False; if not CanWriteExterStorage then begin if not (CheckPermission(C_android_permission_EXTERNAL_STORAGE)) then begin ShowMessage(' "WRITE_EXTERNAL_STORAGE" no es "True"'); Sleep(5000); exit; end; end; {$ENDIF} Result := True; end;


Está confirmado. Sigo peleando. Ya contaré.

Bueno, no me quedó claro dónde cambias los permisos, en el terminal o al subir a Play Store.

Saludos cordiales.



Los permisos los autorizo en el terminal.


Efectivamente, en las ultimas versiones de android el tema permisos es mucho más extricto y sé que por código (me he de mirar el tuyo) se comprueba si están dados y se programa el pedirlos. Esa es una parte enla que aún no me he puesto. Lo que hago es autorizarlos directamente en el terminal.


Si instalo en el S4 y en el terminal voy a permisos de la aplicación ya aparecen todos autorizados
Si instalo enel S6 y miro lo mismo aparecen no autorizados, y los autorizo en ese menú
Claro que no es la forma, lo correcto es por código mirar si están autorizados y pedir la autorización si no lo están.


Comentas:
Si instalo en mis terminales laTableta 4.4, Telef 4.1.2 y telef 7.1.1 (los números son las versiones Android). Digo, si instalo desde el IDE con android:targetSdkVersion por defecto funciona en todos.

En este punto no sé si al estar los terminales en modo desarrollador ya se autorizan. Yo en modo desrrollador solo tengo puesto el S4, en el S6 los isntalo desde el play.


Otra cosa, comentas:


Si cambio la versión en el Manifest funciona en los antiguos pero en el nuevo (7.1.1) me da error de escritura en la SD. Parece ser que las nuevas versiones de Android son más restrictivas con los permisos y por ahí van los tiros en Play Store.

Yo creo que debe haber una consistencia entre targetSdkVersion declarado en el manifest y la api usada. Compilas con api 26.....manifest 26. Me imagino


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


La franja horaria es GMT +2. Ahora son las 18:53:56.


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