Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Desarrollo en Delphi para Android (https://www.clubdelphi.com/foros/forumdisplay.php?f=57)
-   -   Compartir en (https://www.clubdelphi.com/foros/showthread.php?t=96438)

vroa74 11-10-2023 00:31:53

Compartir en
 
Estoy intentando hacer un programa una de sus funcionalidades indispensable es la de poder enviar documentos, pense que la mejor forma de jacerlo por la gran veridad de opciones seria la de corpartir en..


no tengo la menor idea de por donde empezar a escribir o a que instancia debo invocar
si les agradeceria su apoyo cualquie indicacion manual o videotutoria se le agradeceria.

Neftali [Germán.Estévez] 11-10-2023 08:41:52

En el caso de fotos/Imágenes, es bastante sencillo a través de las acciones estandard de una TActionlist; New/Standard Action para añadir una nueva del tipo TShowShareSheetAction (https://docwiki.embarcadero.com/Libr...areSheetAction).

En el caso de otro tipo de ficheros, creo que debes ir a utilizar "intents" con la acción ACTION_SEND.
Busca información sobre:
Código Delphi [-]
TJIntent.JavaClass.ACTION_SEND

dani36652 13-10-2023 21:41:59

Desconozco si solo me ocurrió a mí pero el usar TActionList en mi caso no funcionó para llevar a cabo la funcionalidad al usar Delphi 10.4.2 Sydney.
Sin embargo, puedes hacerlo de esta manera tanto en Sydney como en Alexandria.
Antes que nada debes marcar el checkbox de la opción Secure File Sharing en las opciones de tu proyecto.
Y el método quedaría de esta manera.
Código Delphi [-]
uses 
    {$IFDEF ANDROID}
     Androidapi.JNI.Provider,Androidapi.Jni.Support,Androidapi.StorageManager,
     Androidapi.jni,fmx.helpers.android, Androidapi.Jni.app,
     Androidapi.Jni.GraphicsContentViewText, Androidapi.JniBridge,
     FMX.ScrollBox, FMX.Memo,Androidapi.JNI.Os, Androidapi.Jni.Telephony,
     Androidapi.JNI.JavaTypes,idUri,Androidapi.JNI.NET, Androidapi.Helpers,
     Androidapi.JNI.Widget, Grijjy.TextToSpeech, FMX.Media, FMX.Advertising;
    {$ENDIF}
    
    procedure CompartirCon;
var
  Intent:JIntent;
  Uri:JNet_Uri;
  arch:JFile;
  Uris:JArrayList;
  FilePath: string;
  FileName: string;
  Toast: JToast;
begin
  //Ejemplo
  FilePath:= TPath.GetDocumentsPath + PathDelim;
  FileName:= FilePath + 'Archivo.txt';

  if tfile.Exists(FileName) then
  begin
    Uris:=TJArrayList.JavaClass.init;
    arch:=TJFile.JavaClass.init(StringToJString(FileName));
    arch.setReadable(true,false);
    Uri:= TAndroidHelper.JFileToJURI(arch);
    Uris.add(Uri);
    Intent:=TJIntent.Create;
    Intent.setAction(TJIntent.JavaClass.ACTION_SEND_MULTIPLE);
    Intent.setType(StringToJString('text/plain')); (*Es el homólogo a MimeType y es opcional;
    documentación: https://developer.android.com/refere...mon/MimeTypes*)
    Intent.addFlags(TJIntent.JavaClass.FLAG_GRANT_READ_URI_PERMISSION);
    Intent.putParcelableArrayListExtra(TJIntent.JavaClass.EXTRA_STREAM, Uris);
    try
      (* Puedes usar únicamente una de estas dos *)
      TAndroidHelper.Activity.startActivity(Intent); //Esta forma

      TAndroidHelper.Activity.startActivity(TJIntent.JavaClass.createChooser(Intent, //ó esta otra
      StrToJCharSequence('Compartir con...')));
    finally
      Uris.clear;
    end;
  end else
  begin
    Toast:= TJToast.JavaClass.makeText(TAndroidHelper.Context,
    StrToJCharSequence('No existe el archivo especificado.'), TJToast.JavaClass.LENGTH_SHORT);
    Toast.setGravity(TJGravity.JavaClass.CENTER, 0 , 0);
    Toast.show;
  end;
end;


La franja horaria es GMT +2. Ahora son las 05:48:17.

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