PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WINDEV Mobile 2024 → [WM14] Activation GPRS via Connection manager
[WM14] Activation GPRS via Connection manager
Iniciado por Olivier, jan., 08 2010 12:52 AM - 5 respostas
Publicado em janeiro, 08 2010 - 12:52 AM
Bonjour,

Lorsqu'on utilise Internet Explorer sous Windows Mobile, il lance automatiquement la connexion GPRS (si necessaire), c'est le principe de Connection Manager qui gère l'ouverture du meilleur "tuyau" disponible pour faire passer le trafic IP.

Sous Windev Mobile, lorsqu'on fait une requete (simulation d'un ping via l'ouverture d'une socket par exemple) le connection manager ne semble pas sollicité et l'ouverture de la connection GPRS ne se fait pas.

Y'a t'il une solution pour contourner cela ?

Merci pour le coup de main,

PS: je sais qu'il existe une fonction de connection sous Windev, mais elle est synchrone et c'est finalement pas interessant pour nos utilisateurs d'être bloqué pendant l'envoi de données qui normalement se fait en tache de fond...
Publicado em janeiro, 15 2010 - 4:11 PM
Bonjour,

En fait je vous recommande cette solution qui fonctionne dans mon cas :

1- utiliser NetListeAccèsDistant() pour lister toutes les connexions disponibles sur le PDA
2- utiliser NetInfoAccèsDistant() pour vérifier si la connexion que vous voulez utiliser est deja montée (dans mon cas les PDA son parfois connectés au business mail)
3- Ouvrir la connexion si besoin par NetOuvreAccèsDistant()
4- si elle était fermée lorsque vous appeler votre code, vous pouvez la refermer avant la fin du programme par exemple NetFermeAccèsDistant().

Attention, la focntion d'ouverture de connexion est bloquante il me semble. Je ne pense pas qu'utiliser un thread secondaire soit une solution.

Du coup vous ne passez pas par le CommManager.
A noter que l'icone de connexion GPRS/EDGE/3G n'est pas géré, vous devrez le faire vous même si besoin.

Cdt

Laurent.
Publicado em janeiro, 16 2010 - 6:33 PM
Comme je l'indiquais la fonction de connexion de Windev est effectivement bloquante, et le fait de la mettre dans un thread ne change rien: l'application se retrouve bloquée.

Par contre les tests que j'avais fait montrait que l'état de l'icone GPRS/EDGE se retrouvait impactée par la fonction de connexion Windev (PDA sous WM5.0).

Je me suis tourné vers OpenNetCF ou j'ai trouvé toutes les fonctions nécessaires pour implémenter un assemblage en C#, et ca roule....
Publicado em janeiro, 25 2010 - 9:14 AM
Bj Laurent
mon programme est comme vous indiquez
(poste http://forum.pcsoft.fr/post.awp…&)
est ce que vous pouvez jeter 1 coup d'oeil ?
merci
a+

Laurent a écrit dans le message de news <a2bd6e549c56cc3745bda1ef42fd4e54@news.pcsoft> :
Bonjour,

En fait je vous recommande cette solution qui fonctionne dans mon cas :

1- utiliser NetListeAccèsDistant() pour lister toutes les connexions disponibles sur le PDA
2- utiliser NetInfoAccèsDistant() pour vérifier si la connexion que vous voulez utiliser est deja montée (dans mon cas les PDA son parfois connectés au business mail)
3- Ouvrir la connexion si besoin par NetOuvreAccèsDistant()
4- si elle était fermée lorsque vous appeler votre code, vous pouvez la refermer avant la fin du programme par exemple NetFermeAccèsDistant().

Attention, la focntion d'ouverture de connexion est bloquante il me semble. Je ne pense pas qu'utiliser un thread secondaire soit une solution.

Du coup vous ne passez pas par le CommManager.
A noter que l'icone de connexion GPRS/EDGE/3G n'est pas géré, vous devrez le faire vous même si besoin.

Cdt

Laurent.

Publicado em janeiro, 27 2010 - 7:56 AM
Désolé, je ne parle pas windev mais voilà ce que j'écris en delphi dotnet :

//GPRS Connection Manager
[DllImport('cellcore.dll')]
function ConnMgrEstablishConnectionSync(ci:ConnMgrConnectionInfo;var hConnexion:intptr;dwTimeout:uint32;var pdwStatus:uint32):int32;external;
[DllImport('cellcore.dll')]
function ConnMgrMapURL(pwszURL:string;var unGuid:Guid;pdwIndex:intptr):int32;external;
[DllImport('cellcore.dll')]
function ConnMgrReleaseConnection(hConnexion:IntPtr;bCache:int32):int32;external;

function OuvreGPRS(var hconnexion:intptr;labelaffiche:system.windows.forms.label):string;
const IID_Gprs:TGuid='{adb0b001-10b5-3f39-27c6-9742e785fcd4}';
var infoconnexion:ConnMgrConnectionInfo;
dwstatus:uint32;
ret:int32;
msg:string;
begin
if LabelAffiche<>nil then
begin
LabelAffiche.text:='Ouverture GPRS';
LabelAffiche.update;
end;
msg:='';
hconnexion:=intptr.zero;
infoconnexion:=ConnMgrConnectionInfo.create;
ret:=0;
with infoconnexion do
begin
cbsize:=Marshal.SizeOf(typeof(ConnMgrConnectionInfo));
dwParams:=1;
dwFlags:=1;
dwPriority:=$2000;
bExclusive:=0;
bDisabled:=0;
guidDestNet:=IID_Gprs;
//'{adb0b001-10b5-3f39-27c6-9742e785fcd4}' for gprs (vu dans Opennetcf)
//'{A1182988-0D73-439e-87AD-2A5B369F808B}' for work
//'{436ef144-b4fb-4863-a041-8f905a62c572}' for internet
hwnd:=intPtr.zero;
uMsg:=0;
lparam:=0;
ulMaxCost:=0;
ulMinRcvBw:=0;
ulMaxConnLatency:=0;
end;
dwstatus:=0;
try
//pas mettre moins de 25000 soit 25 secondes
ret:=ConnMgrEstablishConnectionSync(infoconnexion,hconnexion, 25000, dwStatus);
except
hconnexion:=intptr.zero;
msg:='GPRS activation impossible';
end;
infoconnexion:=nil;
if msg='' then
begin
//si le ret=0 et dwstatus=16 alors on est connecté : la fonction sort dès que l'on on se connecte donc avant timeout
//le retour est immédiat avec ret=0 et dwstatus=16 si on est déja connecté
//quand cela ne va pas ret=-2147467259 et
//si dwstatus=0 : raison inconnue
// dwstatus=39 : le téléphone n'est pas activé
// dwstatus=64 : le timeout d'attente doit être trop bas car 64 veut dire attente de connexion
// dommage que si on rappelle à nouveau ConnMgrEstablishConnectionSync avec les mêmes
// paramètres on échoue encore avec 64 alors qu'on voit les flèches du gprs bouger
//msgbox(ret.tostring+' x='+dwstatus.tostring);
if ret<0 then
begin
hconnexion:=intptr.zero;
case dwstatus of
39:msg:='Téléphonie non active';
else msg:='GPRS non disponible';
end;
end;
end;
if LabelAffiche<>nil then
begin
LabelAffiche.text:='';
LabelAffiche.update;
end;
result:=msg;
end;

procedure FermeGPRS(hConnexion:intptr);
//lu chez microsoft : cela ne ferme pas le gprs car microsoft considère que cela ne coute rien
// de le laisser connecté car la facturation ne se fait que quand il y a des datas
// le côté consommation en énergie est malheureusement oubliée !!!
begin
try
//cela ne change rien, que l'on mette 0 ou 1 en bcache ou une autre valeur, le GPRS reste activé
if hconnexion<>intptr.zero then ConnMgrReleaseConnection(hConnexion,0);
except
end;
hconnexion:=intptr.zero;
end;
Publicado em março, 23 2010 - 3:13 PM
bonjour,
savez vous s'il est possible de détecter un streaming, ou un envoi de SMS avec l'api connection manager.

merci d'avance