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

Flex Discussion :

Détecter si l'utilisateur a autorisé l'accès au microphone [Flex3]


Sujet :

Flex

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 30
    Points : 17
    Points
    17
    Par défaut Détecter si l'utilisateur a autorisé l'accès au microphone
    Bonjour à tous,

    Mon projet actuel a besoin d'accéder au micro et à la caméra de l'utilisateur. J'aimerais donc détecter si j'ai les autorisations nécessaires.

    Je me suis donc basé sur cet exemple :

    http://help.adobe.com/en_US/FlashPla...xamplesSummary

    Afin de vérifier si mon code était valide, j'ai fait un petit projet spécifique, pour tester :

    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
    <?xml version="1.0" encoding="utf-8"?>
    <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
                   xmlns:s="library://ns.adobe.com/flex/spark"
                   xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
                   initialize="init(event)">
        <fx:Declarations>
            <!-- Placer ici les éléments non visuels (services et objets de valeur, par exemple). -->
        </fx:Declarations>
        <fx:Script>
            <![CDATA[
                import mx.controls.Alert;
                import mx.events.FlexEvent;
     
                private var mic:Microphone;
     
                protected function init(event:FlexEvent):void
                {
                    mic = Microphone.getMicrophone();
                    if (mic != null) {
                        mic.addEventListener(StatusEvent.STATUS, statusEventHandler);
                        if (mic.muted) {
                            Security.showSettings(SecurityPanel.PRIVACY);
                        }
                    }
                }
     
                private function statusEventHandler(statusEvent:StatusEvent):void {
                    Alert.show(statusEvent.code, "StatusEvent");
                }
     
            ]]>
        </fx:Script>
     
    </s:Application>
    Ici, j'ai bien le comportement attendu :
    - je détecte que je n'ai pas encore l'autorisation d'accéder au micro
    - j'affiche la fenêtre de "paramètres"
    - je reçois l'event dans mon handler.

    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
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application 
    	xmlns:mx="http://www.adobe.com/2006/mxml"
    	xmlns:ctrl="com.flashphoner.api.communication.*" 
    	xmlns:click2call="com.flashphoner.click2call.views.*"
    	width="240" height="520" initialize="init()" layout="absolute" verticalScrollPolicy="off" horizontalScrollPolicy="off"
    	backgroundAlpha="0">
     
        <mx:Style source="styles/style.css"/>
        <mx:Script>
            <![CDATA[
    			import com.adobe.cairngorm.control.CairngormEventDispatcher;
    			import com.flashphoner.Logger;
    			import com.flashphoner.api.Flash_API;
    			import com.flashphoner.api.data.PhoneConfig;
    			import com.flashphoner.api.management.SoundControl;
    			import com.flashphoner.click2call.APINotifyClick2Call;
    			import com.flashphoner.click2call.DataClick2Call;
    			import com.flashphoner.click2call.LabelValue;
    			import com.flashphoner.click2call.statemachine.CallStateMachineManager;
    			import com.flashphoner.click2call.statemachine.CallTransitionEvent;
    			import com.flashphoner.click2call.views.VersionView;
     
    			import mx.controls.Alert;
    			import mx.events.FlexEvent;
    			import mx.managers.PopUpManager;
    			import mx.utils.ObjectUtil;
     
    			private static const VERSION_NUMBER:String = "0.9-snapshot";
     
            	private var count:int=0;    
     
    			private var versionView:VersionView;
    			private var callStateMachine:CallStateMachineManager = new CallStateMachineManager();
    			private var apiNotify:APINotifyClick2Call = new APINotifyClick2Call();
     
    			private var mic:Microphone;
     
            	private function init():void
            	{	
    				Logger.info("Starting click2call - current version : " + VERSION_NUMBER);
     
            		DataClick2Call.getInstance().flash_API.addAPINotify(apiNotify);
    				DataClick2Call.getInstance().phoneButtonLabel = phoneButtonLabel;
    				DataClick2Call.getInstance().videoButtonLabel = videoButtonLabel;
    				DataClick2Call.getInstance().videoView = videoView;				
     
    				//show logger window if debug mode
    				if (parameters.hasOwnProperty("debug")) {
    					loggerTextArea.visible = true;
    				} else {
    					loggerTextArea.visible = false;
    				}
     
    				if (parameters.hasOwnProperty("contactName")) {
    					DataClick2Call.getInstance().contactName = parameters.contactName;
    					DataClick2Call.getInstance().phoneButtonLabel.text = DataClick2Call.getInstance().contactName;
    				}
    				if (parameters.hasOwnProperty("enableVideo")) {
    					var enableVideoString:String = parameters.enableVideo as String;
    					Logger.info("enableVideo as String value : "+ enableVideoString);
    					var enableVideo:Boolean = false;
    					if (enableVideoString == "true") {
    						enableVideo = true;
    					}
    					Logger.info("enableVideo value : "+ enableVideo);
     
    					videoButtonLabel.visible = enableVideo;
    					videoButton.visible = enableVideo;
    				}
    				// adding listeners to callEvent
    				addEventListener(CallTransitionEvent.AUDIO_CLICK, callStateMachine.stateEval);
    				addEventListener(CallTransitionEvent.CONNECTED, callStateMachine.stateEval);
    				addEventListener(CallTransitionEvent.RINGING, callStateMachine.stateEval);
    				addEventListener(CallTransitionEvent.BUSY, callStateMachine.stateEval);
    				addEventListener(CallTransitionEvent.OK, callStateMachine.stateEval);
    				addEventListener(CallTransitionEvent.FINISH, callStateMachine.stateEval);
    				addEventListener(CallTransitionEvent.ERROR, callStateMachine.stateEval);
    				addEventListener(CallTransitionEvent.DISCONNECTED, callStateMachine.stateEval);
    				addEventListener(CallTransitionEvent.VIDEO_CHANGED, callStateMachine.stateEval);
    				addEventListener(CallTransitionEvent.VIDEO_CLICK, callStateMachine.stateEval);
    				addEventListener(CallTransitionEvent.VIDEO_TIMEOUT, callStateMachine.stateEval);
     
    				// test microphone - display security panel if muted
    				mic = Microphone.getMicrophone();
    				if (mic != null) {
    					mic.addEventListener(StatusEvent.STATUS, microphoneStatusEventHandler);
    					if (mic.muted) {
    						Security.showSettings(SecurityPanel.PRIVACY);
    					}
    				}
     
            	}      	 
     
    			private function microphoneStatusEventHandler(statusEvent:StatusEvent):void {
    				Logger.debug("microphoneStatusEventHandler : "+ ObjectUtil.toString(statusEvent)); 
    			}
     
    			private function onOpenMicrophoneSettingsView():void{
            		SoundControl.getInstance().getMicrophone().setLoopBack(true);
            		PopUpManager.addPopUp(DataClick2Call.getInstance().microphoneSettingsView,this);
            		//PopUpManager.centerPopUp(DataClick2Call.getInstance().microphoneSettingsView);
     
            	}        	
     
     
            ]]>       
        </mx:Script>  
    	<!-- Grey : [#ababab, #c4c4c4] -->
    <mx:Panel width="100%" height="100%" layout="absolute" cornerRadius="0" backgroundAlpha="0">
    	<click2call:PhoneButton id="phoneButton" x="12" y="59" width="150" height="35" cornerRadius="5"/>
    	<mx:Label id="phoneButtonLabel" x="12" y="100" width="150" textAlign="center" fontSize="12" visible="true" fontWeight="normal" color="#FFFFFF"/>
     
    	<mx:Button x="174" y="59" width="35" height="35" alpha="0.65" borderColor="#C1CFE1"
    			   click="onOpenMicrophoneSettingsView()" cornerRadius="5" fillAlphas="[1.0, 1.0]"
    			   fillColors="[#DEEEFF, #A5CCFF, #B7DBFF, #4A8ACB]" fontSize="10" themeColor="#86A3C1"
    			   toolTip="Mic settings" icon="@Embed(source='/assets/parameters.png')"/>
     
     
     
    	<click2call:VideoButton id="videoButton" x="12" y="137" width="150" height="35" label="Vidéo" cornerRadius="5" toolTip="Open video window"/> 
    	<mx:Label id="videoButtonLabel" x="12" y="175" width="150"  textAlign="center" fontSize="12" visible="true" fontWeight="normal" color="#FFFFFF"/>
    	<click2call:VideoView id="videoView" visible="false" x="12" y="200"/> 
     
    	<!--  Logger -->
    	<mx:TextArea id="loggerTextArea" x="5" y="215" horizontalCenter="true" width="230" height="300" editable="false" verticalScrollPolicy="auto" text="{Logger.log}"/> 
     
    </mx:Panel>
     
     
    </mx:Application>
    J'ai donc repris le code, et je l'ai injecté dans mon projet actuel.

    Cependant, dans cette configuration, je ne reçois pas le StatusEvent quand je clique sur la case "autoriser" dans les paramètres.

    En utilisant le débuggeur, j'ai vu que :
    - sans breakpoint, impossible d'entrer dans microphoneStatusEventHandler.
    - quand je met un breakpoint, l'application rentre dans microphoneStatusEventHandler avant même d'afficher le log initial (Logger.info("Starting click2call - current version : " + VERSION_NUMBER)). Tant que le breakpoint reste activé, je reviens toujours dans le handler. Si je le désactive, l'application s'exécute normalement.

    Je ne sais pas trop d'où provient ce comportement, donc si quelqu'un a une piste, je suis preneur.

    Mon player flash est le 11.0.1.152 , sous windows seven.

    Merci d'avance.

  2. #2
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    Salut,

    déjà ton appli de test est sous Flex 4 ou supérieur alors que ton appli cible est en 3 (cf. mx:Application / s:Application).
    Histoire d'être certains, d'avoir le meme environnement de test fait la modif

    Pour le reste, je t'avoue que c'est difficile de diagnostiquer à distance au vu de ce que tu évoques.

    Pensez vraiment à effectuer une recherche avant de poster, ici et sur un moteur de recherche! c'est la moindre des choses
    Pensez au tag

    Mon Blog sur la techno Flex
    Ma page sur Developpez.com

    Jim_Nastiq

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 30
    Points : 17
    Points
    17
    Par défaut
    Merci pour ta réponse.

    Je viens de modifier mon appli de test, et ça marche aussi avec mx:application.

    EDIT :

    Un appel de la fonction willTrigger sur mic (mon microphone), m'indique que j'ai bien un eventListener sur StatusEvent.STATUS, mais je n'ai pas d'événement de ce type qui est dispatché par le security panel (comme indiqué dans la doc).

    Pour le moment, j'ai mis en place un timer (pas très joli donc) qui rappelle mon listener.

    Y a t'il un moyen de savoir si un événement est lancé ? Idéalement, j'aimerais savoir à l'aide du débuggueur si j'ai un StatusEvent.STATUS.

    Enfin, je m'aperçois que j'ai une référence vers Caingorm dans mon projet (vive la reprise de l'existant). Je ne connais pas le framework, peut il y avoir une interférence ?

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 31/05/2007, 10h56
  2. Réponses: 8
    Dernier message: 31/08/2006, 16h34
  3. Détecter si l'utilisateur bloque le javascript
    Par arnolem dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 30/05/2006, 16h45
  4. Détecter lorsque l'utilisateur sort d'un controle Image
    Par tebonb dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 23/12/2005, 08h53
  5. Comment détecter quand un utilisateur appuie sur le bouton Power ?
    Par Millenod dans le forum API, COM et SDKs
    Réponses: 7
    Dernier message: 22/09/2005, 21h05

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