IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants FMX Delphi Discussion :

[ARM] Détecter appel entrant [Android]


Sujet :

Composants FMX Delphi

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2003
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 17
    Points : 13
    Points
    13
    Par défaut [ARM] Détecter appel entrant
    Bonjour,
    mon but est de créer un programme simple qui affiche le numéro de téléphone entrant sous Android.
    Je compile et charge le programme sur mon téléphone , aucun problème. Mais lorsque j'appelle mon téléphone il ne se passe rien ...

    Sur ma form j'ai un "memo1" et un "label1".

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    unit Unit1;
     
    interface
     
    uses
      System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, System.Permissions,
      FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.PhoneDialer,
      FMX.Controls.Presentation, FMX.StdCtrls, FMX.ScrollBox, FMX.Memo;
     
    type
      TForm1 = class(TForm)
        Memo1: TMemo;
        procedure FormCreate(Sender: TObject);
     
      private
        FService: IFMXPhoneDialerService;
        procedure CallStateChangedHandler(const ACallID: string; const AState: TCallState);
      public
        constructor Create(AOwner: TComponent); override;
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.fmx}
    {$R *.LgXhdpiPh.fmx ANDROID}
     
    uses
      FMX.Platform;
     
    { TForm1 }
     
    constructor TForm1.Create(AOwner: TComponent);
    begin
      inherited;
      TPermissionsService.DefaultService.RequestPermissions(['android.permission.READ_PHONE_STATE'],
        procedure(const APermissions: TArray<string>; const AGrantResults: TArray<TPermissionStatus>)
        begin
          if AGrantResults[0] = TPermissionStatus.Granted then
          begin
            if TPlatformServices.Current.SupportsPlatformService(IFMXPhoneDialerService, FService) then
              FService.OnCallStateChanged := CallStateChangedHandler;
                memo1.lines.add ('Passe par create // permission granted');
          end
           else
                memo1.lines.add ('Passe par create // PAS permission granted');
        end
      );
    end;
     
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
     inherited;
      TPermissionsService.DefaultService.RequestPermissions(['android.permission.READ_PHONE_STATE'],
        procedure(const APermissions: TArray<string>; const AGrantResults: TArray<TPermissionStatus>)
        begin
          if AGrantResults[0] = TPermissionStatus.Granted then
          begin
            if TPlatformServices.Current.SupportsPlatformService(IFMXPhoneDialerService, FService) then
              FService.OnCallStateChanged := CallStateChangedHandler;
                memo1.lines.add ('Passe par create // permission granted');
          end
           else
                memo1.lines.add ('Passe par create // PAS permission granted');
        end
      );
    end;
     
    procedure TForm1.CallStateChangedHandler(const ACallID: string; const AState: TCallState);
    begin
      memo1.lines.add ('Passe par callstatechange');
      case AState of
        TCallState.Incoming:
          memo1.lines.add ('Incoming call from: ' + ACallID);
      end;
    end;
     
    end.

    Je suis débutant je ne comprends pas pourquoi ça ne fonctionne pas. Merci de votre aide.
    Gatesbillou

  2. #2
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    je ne l'ai jamais fait, mais ton code est insuffisant

    voici comment le faire sous Android Studio
    https://stackoverflow.com/questions/...android-device

    il faut déjà déclarer dans le fichier AndroidManifest un receiver...après il faut voir comment l'implémenter sous Delphi, je ne sais pas si c'est possible car Delphi est compilé en natif ARM, c'est l'équivalent du NDK Android (Native Developement Kit)...donc pour ce genre de chose il faut regarder s'il existe un exemple basé sur le NDK
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    Bonjour,
    J'étudierai aussi les pistes services Androïd et tout ce qui concerne les Java Intents (JNI)
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  4. #4
    Membre à l'essai
    Inscrit en
    Mai 2003
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 17
    Points : 13
    Points
    13
    Par défaut Merci
    D'abord merci a vous deux pour vos pistes de recherche.

    Je vais tenter de mieux comprendre le fonctionnement des "Java Intents" , je pense en effet que c'est la clef.
    Pour le moment c'est plutôt flou tout ça , j'ai du mal a comprendre le fonctionnement d'android en fait.
    Si je prends l'exemple de "ms-dos" , c'était relativement facile a comprendre il suffisait de rediriger l'interruption vers notre code pour qu'il se déclenche , puis de repasser la main au code d'origine , mais là c'est plus compliquer a comprendre ; comment déclencher notre code en fonction d'un événement ? mystère ...

    >il faut déjà déclarer dans le fichier AndroidManifest un receiver.
    Je pensais qu'il ne fallait pas modifier manuellement androidManifest car il est généré par delphi , de plus je ne sais pas comment spécifier un "receiver" dans delphi , ni dans le "manifest" d'ailleur.

    Bref, j'ai encore BEAUCOUP de pain sur la planche.... Mon "CallStateChangedHandler" n'est jamais appelé et je ne saurai supporter cela bien longtemps

    Ce qui me sidéré , c'est que ANDROID est connu avant tout pour son utilisation sur smartphone et qu'il n'y a pas d'exemple pour détecter une sonnerie. J'arrive a faire vibrer mon téléphone , à lui faire passer des appels mais pas a les intercepter...
    Encore merci. Je vous tiendrai au courant si je trouve la solution.
    Gatesbillou

  5. #5
    Membre à l'essai
    Inscrit en
    Mai 2003
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 17
    Points : 13
    Points
    13
    Par défaut Solution
    Ça marche !

    Avec l'aide de "Dave Nottage" du site delphiworlds.com j'ai enfin mon appli android programmé en Pascal sous Delphi qui détecte lorsque je reçois un appel et m'affiche le numéro de téléphone.

    Voici le code source a télécharger :
    https://github.com/DelphiWorlds/Misc...dPhoneDemo.zip
    Gatesbillou

  6. #6
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    super, et merci pour le retour

    je n'ai pas regardé le détail, mais je vois qu'il y a un dw-telephony.jar qui correspond à un bout de Java nécessaire à cela
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  7. #7
    Membre averti Avatar de franckcl
    Homme Profil pro
    Developpeur Delphi
    Inscrit en
    Septembre 2004
    Messages
    516
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Developpeur Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 516
    Points : 443
    Points
    443
    Par défaut
    Citation Envoyé par Pascal_ Voir le message
    Ça marche !

    Avec l'aide de "Dave Nottage" du site delphiworlds.com j'ai enfin mon appli android programmé en Pascal sous Delphi qui détecte lorsque je reçois un appel et m'affiche le numéro de téléphone.

    Voici le code source a télécharger :
    https://github.com/DelphiWorlds/Misc...dPhoneDemo.zip
    Bonjour Pascal,
    Je sais que ce post commence à dater mais je serais intéréssé par ton code et le lien ne fonctionne plus.
    Pourrais-tu le partager à nouveau ? ou le déposer sur ce site ?
    merci
    Franck

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD14] Détection d'appel entrant
    Par reitsab dans le forum WinDev
    Réponses: 3
    Dernier message: 31/05/2012, 16h42
  2. [AJAX] Détecter appel Ajax en php
    Par JerryOne3 dans le forum AJAX
    Réponses: 7
    Dernier message: 22/06/2011, 09h09
  3. récupérer un appel entrant pour traitement
    Par renaudjuif dans le forum Général Conception Web
    Réponses: 6
    Dernier message: 04/03/2009, 09h31
  4. reconnaitre un appel entrant
    Par kleomas dans le forum Développement
    Réponses: 1
    Dernier message: 22/08/2006, 10h30
  5. Réponses: 3
    Dernier message: 26/07/2005, 16h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo