Accediendo a la cámara del dispositivo Android con Rad Studio 10

Para empezar vamos a hacer una pequeña aplicación móvil en la que vamos a capturar y compartir imágenes de la cámara y de la galería de nuestro dispositivo. Nuestra aplicación va a estar escrita en código  Delphi y se ejecutará en un dispositivo Android.

Empecemos...

Iniciamos nuestro Delphi RAD Studio 10 y empezamos a crear nuestra aplicación desde File–New–Multi Device Application 
Vale la pena señalar que hay varias plantillas de diseño de aplicaciones que se pueden seleccionar, en nuestro caso elegimos una en blanco (Blank Application).


En Style seleccionaremos Android y en View= Master, el Form le llamaremos Form1. Salvamos el proyecto a través de la opción de menú  File – Save All
Vamos a incluir en nuestro proyecto un TImage, un TToolBar,  tres TButton y un TActionListAhora tenemos que cambiar algunas propiedades de los objetos en nuestro proyecto, empezando por la forma en que se mostrará en el dispositivo de visualización IDE, Los otros objetos seguirán se configurarán como sigue:

Button1
- Name= btnCam
- StyleLookup=cameratoolbutton
Button2
- Name= btnArchivo

- StyleLookup=searchtoolbutton
Button3
- Name= btnCompartir
- StyleLookup=actiontoolbutton
image1
-Name=ImgFoto
-Align=Client

Asignación de código y acciones

Con la aplicación que tiene el diseño ya definido falta sólo poner nuestras líneas de código, pero junto con este proceso vamos a asignar acciones predefinidas para poder permitir que nuestra aplicación pueda acceder a las características del dispositivo Android. 
Seleccione la btnCam y Object Inspector haga clic en la propiedad Action, a continuación, seleccione New Standard Action-Media Library-TTakePhotoFromCameraAction
Desde el Object Inspectorvaya a la pestaña Events y expanda la propiedad Action, ver más abajo:

desde allí seleccione el evento onDidFinishTaking y escriba image1.Bitmap.Assign(Image);




procedure TfrmAndPrincipal.TakePhotoFromCameraAction1DidFinishTaking(Image: TBitmap);
begin
    image1.Bitmap.Assign(Image);
end;

Con este código nuestra aplicación es capaz de capturar imágenes desde la cámara del dispositivo. 
Para el botón   btnArchivo, haremos el mismo procedimiento, usando New Standard Action-Media Library-TTakePhotoFromLibraryAction. Para este botón también se utilizará el mismo evento onDidFinishTaking y su código para btnArchivo será:




procedure TfrmAndPrincipal.TakePhotoFromLibraryAction1DidFinishTaking(Image: TBitmap);
begin   
image1.Bitmap.Assign(Image);
end;

Finalmente asignamos a  btnCompartir  desde New Standard Action - Media Library –TShowShareSheetAction y en este caso va a codificar su evento onBeforeExecute:




procedure TfrmAndPrincipal.ShowShareSheetAction1BeforeExecute(Sender: TObject);
begin
    ShowShareSheetAction1.Bitmap.Assign(image1.Bitmap);
end;

Compilar y distribuir

Terminado nuestro proceso de codificación de aplicaciones ahora vamos a compilar y desplegar nuestra aplicación. Seleccione el dispositivo de destino para nuestra aplicación, en mi caso elegí un Nexus5.
Aquí tenemos que recordar que el teléfono debe estar con el modo de depuración USB activo y la aceptación de aplicaciones de fuentes desconocidas.
Dar un Build al proyecto y ejecutar sin depurar (Run without debugging). Espere a que el propio RAD Studio 10 se encargue de instalar el APK en su dispositivo.

Como ven con sólo 3 líneas de código hemos podido crear una aplicación que capture fotos con nuestro dispositivo,  las selecciona desde la galería y las comparte, ¡¡ esto es Delphi !! ...cada día facilitándonos la vida a los programadores...

La unit quedaría así:

unit Unit1;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
  FMX.MediaLibrary.Actions, System.Actions, FMX.ActnList, FMX.StdActns,
  FMX.StdCtrls, FMX.Controls.Presentation, FMX.Objects;

type
  TForm1 = class(TForm)
    Image1: TImage;
    ToolBar1: TToolBar;
    BtnCam: TButton;
    BtnArchivo: TButton;
    BtnCompartir: TButton;
    ActionList1: TActionList;
    TakePhotoFromCameraAction1: TTakePhotoFromCameraAction;
    TakePhotoFromLibraryAction1: TTakePhotoFromLibraryAction;
    ShowShareSheetAction1: TShowShareSheetAction;
    procedure TakePhotoFromCameraAction1DidFinishTaking(Image: TBitmap);
    procedure TakePhotoFromLibraryAction1DidFinishTaking(Image: TBitmap);
    procedure ShowShareSheetAction1BeforeExecute(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}
{$R *.LgXhdpiPh.fmx ANDROID}

procedure TForm1.ShowShareSheetAction1BeforeExecute(Sender: TObject);
begin
ShowShareSheetAction1.Bitmap.Assign(image1.Bitmap);
end;

procedure TForm1.TakePhotoFromCameraAction1DidFinishTaking(Image: TBitmap);
begin
image1.Bitmap.Assign(Image);
end;

procedure TForm1.TakePhotoFromLibraryAction1DidFinishTaking(Image: TBitmap);
begin
image1.Bitmap.Assign(Image);
end;

end.

No hay comentarios:

Publicar un comentario